reactjs - React 将对象渲染到列表中

标签 reactjs

我正在使用 map 函数创建项目列表:

render() {

    var accounts = this.props.accounts.map((account, index) =>
        <li className="list-group-item" key={index}>{account[0]}<br />
            <button type="button" >Go to Login</button>
            <button type="button" >Log out</button>
        </li>
    );

    return (

        {accounts && (
            <ul className="accounts-list list-group">{accounts}</ul>
        )}

    )

}

这工作正常,因为帐户是一个数组。

我需要对对象做同样的事情:

{
  "offer": [
    "id",
    "price-input"
  ],
  "offer_message": [
    "id",
    "msg-textarea"
  ]
}

代码:

forms = Object.entries(this.props.forms).forEach(([key, value]) =>

    <div className="form-group">
        {value}
    </div>

)

return (

    {forms}

)

这不会产生任何结果。事实上,forms 是未定义的。如何从对象渲染列表?

谢谢

最佳答案

您正在使用forEach,它返回undefined。您想使用 map 来代替。

还要确保将 {forms} 包装在一个元素中,并为数组中的每个子元素提供一个 key 属性。

示例

class App extends React.Component {
  render() {
    const forms = Object.entries(this.props.forms).map(([key, values]) =>
      <div className="form-group" key={key}>
        {values.join(", ")}
      </div>
    );

    return <div>{forms}</div>;
  }
}

ReactDOM.render(
  <App
    forms={{
      offer: ["id", "price-input"],
      offer_message: ["id", "msg-textarea"]
    }}
  />,
  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>

关于reactjs - React 将对象渲染到列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53315775/

相关文章:

reactjs - 带 props 的 Draftjs 组件

reactjs - Redux state props 值未定义

javascript - react 从函数返回的 onClick JSX

javascript - 2 列编辑器 quilljs

reactjs - 从所选项目中删除项目时如何捕获 react 选择中的删除事件?

javascript - react .js。创建带有参数的方法(props 将是参数)还是在函数体中引用 props 更好?

reactjs - 在不传递任何 props 的情况下实例化组件时出现流错误 "props is incompatible with empty"

javascript - React(Redux + Redux Saga)和 MVC

reactjs - 在reactJS中显示PDF

javascript - React 的 webkit.messageHandlers 将 JavaScript 注入(inject) Swift