使用语义UI动态呈现反应列表

时间:2018-09-23 00:41:04

标签: javascript reactjs redux semantic-ui

我在使用语义UI动态呈现此列表时遇到困难。我遇到了意外的令牌错误,但是我不确定如何使它正常工作。 users_titlesusers_entries都是在状态下设置的数组,但是是从redux映射的,因此它们的长度相同。 (无效)代码如下。我只是想要一个以(title-1..entry1,title2..entry2等)排序的列表。

似乎仅调用另一个组件来创建列表似乎是不必要的(而且我仍然不确定该如何更好地工作)。我和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是道具,格式为:

[ {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'},...]

1 个答案:

答案 0 :(得分:2)

最好将数据成形为对象数组。喜欢:

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

使用此形状,您可以轻松地映射数据并使用属性。但是,如果要根据当前情况执行此操作,则可以映射一个属性,然后使用索引,因为长度相等,因此可以使用相应的属性。不要使用循环,.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>