React 的条件判断和循环

419 阅读1分钟

条件判断

在Vue 里:

条件判断是通过 v-if v-else 指令控制的

<template>
    <div>
        <div v-if="n%2===0">n 是偶数</div>
        <span v-else>n是奇数 </span>
    </div>
</template>

在React 里:

JSX的条件判断

写法一

const Component = () => {
    return n%2===0 ? <div>n 是偶数</div> : <span>n是奇数 </span>
}

如果外边需要一个 div ,把这段JS代码包在 {} 里边

const Component = () => {
    return (
        <div>
            { return n%2===0 ? <div>n 是偶数</div> : <span>n是奇数 </span> }//注意中间要加花括号
        </div>
    )
}

写法二 :把 return 的element起一个名字

const Component = () => {
    const content = (
        <div>
            { return n%2===0 ? <div>n 是偶数</div> : <span>n是奇数 </span>}
        </div>
    )
    return content
}

写法三:把里边的东西起一个名字

const Component = () => {
    const inner = n%2===0 ? <div>n 是偶数</div> : <span>n是奇数 </span>
    const content = (
        <div>
            { inner }
        </div>
    )
return content
}

写法四:使用if...else...

const Component = () => {
    let inner
    if (n%2===0) {
        inner = <div>n 是偶数</div>
    } else {
        inner = <span>n是奇数</span>
    }
    const content = (
        <div>
            { inner }
        </div>
    )
    return content
}

结论

在Vue里,只能用Vue提供的语法进行条件判断

在React里,想怎么写就怎么写,就是在写JS,在JS里用JSX

循环

在Vue里:

通过 v-for 指令遍历数组,对象

<template>
    <div>
        <div v-for="(n, index) in numbers" :key="index">
            下标{{index}} ,值为{{n}}
        </div>
    </div>
</template>

在React里:

const Component = (props) => {
    return props.numbers.map((n,index)=>{
        return <div> 下标{index} 值为{n}</div>
    })
}

组件接收一个参数props,是一个对象。 使用 array.map 映射,把原数组的每一项变成另一种形式 如果需要外边的div:

const Component = (props) => {
    return (
        <div>
            { props.numbers.map((n,index)=>{
                return <div> 下标{index} 值为{n}</div>
            })
            }
        </div>
    )
}

还可以这样写(用的少,map用的多)

const Component = (props) => {
    const array = []
    for(let i=0;i<props.numbers.length;i++){
        array.push(<div> 下标{i} 值为{props.numbers[i]} </div>)
    }
    return (
        <div>
            { array }
        </div>
    )
}

image.png