我在使用语义UI动态呈现此列表时遇到困难。我遇到了意外的令牌错误,但是我不确定如何使它正常工作。 users_titles
和users_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'},...]
答案 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>