有条件地将道具传递给组件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有条件地将道具传递给组件相关的知识,希望对你有一定的参考价值。

在我的组件中,我收到了一个名为secondary的prop我解构,如果该prop存在,我想将它传递给另一个组件,否则不:

...
render() {
      const { yAxis, mandatory, secondary, quantity } = this.props
...
return (
      <View>
        {secondary ? (
          <MyChart
            selectedMandatory={selectedMandatory}
            yAxis={yAxis}
            mandatory={{ ...mandatory, label: labelMandatory }}
            secondary={{ ...secondary, label: labelSecondary }}
            quantity={quantity}
          />
        ) : (
          <MyChart
            selectedMandatory
            yAxis={yAxis}
            mandatory={{ ...mandatory, label: labelMandatory }}
            quantity={quantity}
          />
        )}
       </View>
   ...

还有另一种(更简单的)方法吗?

答案

你可以像这样修复/破解它:

render() {

    var extraProps = {};

    if(secondary) {
        extraProps['secondary'] = { ...secondary, label: labelSecondary } 
    }

    return (
        <View>
            <MyChart
                selectedMandatory={selectedMandatory}
                yAxis={yAxis}
                mandatory={{ ...mandatory, label: labelMandatory }}
                quantity={quantity}
                {...extraProps}
            />
        </View>
    )
}

这样,如果没有定义props.hasOwnProperty('secondary')secondary将是假的。

您甚至可以将所有道具作为变量传递,如果这对您更具可读性:

render() {
    var allProps = {
        selectedMandatory: selectedMandatory,
        yAxis: yAxis,
        mandatory: { ...mandatory, label: labelMandatory },
        quantity: quantity
    };

    if(secondary) {
        allProps['secondary'] = { ...secondary, label: labelSecondary } 
    }

    return (
        <View>
            <MyChart
                {...allProps}
            />
        </View>
    )
}
另一答案

你可以把你的三元条件放在你的道具定义中,如果你的变量是假的,那么undefined将被发送,你的道具将无法访问:

<View>
    <MyChart
        selectedMandatory={selectedMandatory}
        yAxis={yAxis}
        mandatory={{ ...mandatory, label: labelMandatory }}
        secondary={secondary ? { ...secondary, label: labelSecondary } : undefined}
        quantity={quantity}
    />
</View>

以上是关于有条件地将道具传递给组件的主要内容,如果未能解决你的问题,请参考以下文章

React JSX 选择性地将属性传递给组件

Apollo:数据/突变道具未传递给组件

如何将组件中的道具传递给 FlatList renderItem

Vue:改变传递给组件的道具的正确方法?

Vue - 通过路由器将道具传递给组件

如何将道具传递给递归子组件并保留所有道具