无法基于函数呈现组件

时间:2018-04-03 22:00:33

标签: javascript reactjs

我正在尝试渲染几个不同的组件并通过映射传递它的道具。 <li>...</li>包含一系列正在传递的信息。

componentInfo

在我的React组件中,我希望通过单击按钮生成这些组件,并触发displayComponent() { this.state.componentInfo.map(info => { return ( <SomeComponent info={info}/> ) }) } 函数。

displayComponent

但是,我无法显示组件。这是为什么?

1 个答案:

答案 0 :(得分:1)

您没有渲染displayComponent,只是在点击事件中调用它 在您当前的代码设置中,我发现很难实现您的目标,我会将状态中的对象分开:

  state = {
    showComponents: false,
    componentInfo: ['info 1', 'info 2', 'info 3'],
    components: []
  }

然后你可以填充components数组并有条件地渲染它。

运行示例:

const SomeComponent = ({ info }) => <div>{info}</div>;

class App extends React.Component {
  state = {
    showComponents: false,
    componentInfo: ['info 1', 'info 2', 'info 3'],
    components: []
  }

  setComponents = () => {
    this.setState(state => {
      const { componentInfo } = state;
      const nextComponents = componentInfo.map(info => <SomeComponent info={info} />);
      return {
        components: nextComponents,
        showComponents: true
      }
    });
  }
  render() {
    const { showComponents, components } = this.state;
    return (
      <div>
        <button onClick={this.setComponents}>Set Components</button>
        <hr/>
        {showComponents && components}
      </div>
    );
  }
}
ReactDOM.render(<App />, document.getElementById('root'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
	<div id="root"></div>