如何在反应原生应用的渲染功能中包含Javascript代码?

时间:2017-08-25 14:54:17

标签: react-native

我是一个React和React原生菜鸟,所以它可能是一个非常愚蠢的问题,但我怎么能使用' for循环'在render函数里面包含我的组件?这就是我所做的

render() {
  return (
    <View style={styles.container}>
      { for (let i=0; i<20; i++) 
        {
           //This is my component
           <CounterButton />
        }
      }
    </View>
  );
}

但它抛出了一个错误,然后有人建议在代码中包含代码并在render函数中调用它,所以我做了

createButtons() {
  for (let i =0; i<20; i++){
    <CounterButton />;
  }
}

render() {
  return (
    <View style={styles.container}>
      {this.createButtons()}

    </View>
  );
}

现在我看不到错误,但它只是一个空白的屏幕。我知道你可以访问道具但是渲染函数应该主要只包含JSX代码吗?提前致谢。

2 个答案:

答案 0 :(得分:1)

您的createButtons函数不会返回任何内容。 您可以将按钮添加到数组并返回该数组。

createButtons() {
  const buttons = [];
  for (let i =0; i<20; i++){
    buttons.push(<CounterButton />);
  }
  return buttons;
}

请注意,在渲染元素数组时,react-native中的每个元素都需要具有key属性。

答案 1 :(得分:1)

Jsx可以包含返回组件或组件数组的表达式。在您的情况下,您需要一些返回组件数组的东西。

坚持使用for循环:

createButtons() {
  let buttons = [];
  for (let i=0; i<20; i++){
    buttons.push(<CounterButton />);
  }
  return buttons;
}

如果你想在jsx中这样做,这样的事情应该有效:

render() {
  return (
    <View style={styles.container}>
      {[...Array(20).keys()].map(<CounterButton />)}    
    </View>
  );
}