动态渲染具有语义的反应列表 UI

Dynamically render react list with semantic UI

我在使用语义 UI 动态呈现此列表时遇到困难。我遇到了意外的令牌错误,但我不确定如何进行这项工作。 users_titlesusers_entries 都是state中设置的数组,但是从redux映射过来的,所以它们的长度是一样的。 (非工作)代码如下。我只是想要一个排序为 (title-1..entry1, title2..entry2, etc ) 的列表。

看起来调用另一个组件只是为了创建列表似乎是不必要的(而且我仍然不确定它如何更好地工作)。我对 React 和 JS 很陌生,所以任何帮助都将不胜感激。谢谢!

class UsersPosts extends React.Component
...
displayListPosts = () => {

  for (let index = 0; index < this.state.users_entries.length; index++) {
  //debugger
  <List.Item>
    <List.Icon name='file outline' />
    <List.Content>
      <List.Header >
        {this.state.users_titles[index]}
      </List.Header>
      <List.Description>
        {this.state.users_entries[index]}
      </List.Description>
    </List.Content>
  </List.Item>

 }
}

...

render() {
const { loaded } = this.state
if (loaded) {
  return (
    <List>
      { this.displayListPosts() }
    </List>
  )

更新:

从已接受的答案中获得帮助后,工作代码如下所示:

displayListPosts = () =>
this.props.posts.map((el) => (

  <List.Item>
    <List.Icon name='file outline' />
    <List.Content>
      <List.Header >
        {el.title}
      </List.Header>
      <List.Description>
        {el.entry}
      </List.Description>
    </List.Content>
  </List.Item>
));

,其中 posts 是一个 prop,形式为:

[ {id:1,title:'Quis.',entry:'Lorem'...},
{id:2,title:'Consequatur.',ent…:31.999Z'},
{id:3,title:'Laboriosam.',entr…:32.004Z'},
{id:4,title:'Eum.',entry:'Eaqu…:32.010Z'},
{id:5,title:'Reiciendis.',entr…:32.015Z'},
{id:6,title:'Nemo.',entry:'Qui…:32.020Z'},...]

如果您可以将数据塑造为对象数组,那就更好了。喜欢:

[
  { title: "title1", entry: "entry1" },
  { title: "title2", entry: "entry2" }
]

有了这个形状,您可以轻松映射数据并使用属性。但是,如果你想在你当前的情况下这样做,你可以映射一个 属性,然后使用索引你可以使用相应的,因为长度是相等的。不要使用 for 循环,大多数时候 .map 方法是你的朋友。

class App extends React.Component {
  state = {
    user_titles: ["title1", "title2"],
    user_entries: ["entry1", "entry2"]
  };

  displayListPosts = () =>
    this.state.user_titles.map((el, i) => (
      // Maybe, there is a better key :D
      <div key={`${el}-${this.state.user_entries[i]}`}>
        <p>Title: {el}</p>
        <p>Entry: {this.state.user_entries[i]}</p>
      </div>
    ));
  render() {
    return <div>{this.displayListPosts()}</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>