React Native:过滤道具?

时间:2018-03-08 23:52:30

标签: javascript reactjs react-native

我创建了一个基本组件,例如:

export default (props) => (
  <TouchableOpacity {...props} style={styles.button}>
    {props.title && <Text style={styles.text}>{props.title}</Text>}
    {props.icon && <Icon name={props.icon} />}
  </TouchableOpacity>
);

然后我可以用<Component title="Home" icon="home" />来调用它。

问题是将{...props}传递给TouchableOpacity会产生错误,因为它无法正确识别标题或图标。 例如: JSON value 'Home' of type NSString cannot be converted to...

有没有办法过滤道具,以便我只传递有效的TouchableOpacity?

2 个答案:

答案 0 :(得分:3)

Transferring Props

  

有时通过每一处房产都是脆弱而乏味的。在这种情况下,您可以使用具有rest属性的解构赋值来提取一组未知属性。   列出您要使用的所有属性,然后是......其他。

var { checked, ...other } = props;
  

这可以确保您传递所有道具,除了您所拥有的道具   消耗自己。

function FancyCheckbox(props) {
  var { checked, ...other } = props;
  var fancyClass = checked ? 'FancyChecked' : 'FancyUnchecked';
  // `other` contains { onClick: console.log } but not the checked property
  return (
    <div {...other} className={fancyClass} />
  );
}
ReactDOM.render(
  <FancyCheckbox checked={true} onClick={console.log.bind(console)}>
    Hello world!
  </FancyCheckbox>,
  document.getElementById('example')
);

答案 1 :(得分:2)

与Paul Mcloughlin一样,我建议使用object destructuringrest parameter。您可以直接在函数参数中构造道具对象,如下所示:

d3.timeFormatDefaultLocale(format);

这会从您的道具对象中提取({title, icon, ...remainingProps}) => (...) title道具,并将其余道具传递为icon

您的完整组件将是:

remainingProps