我从API异步获取数据,并认为解决了相关的时序问题here,但仍然存在渲染未更新的问题。
由于我的组件无法更新,因此将其分解为基本的无状态版本,然后它开始工作。我试图制作相同版本的组件,+ /-状态。如我所说,只有无状态版本才能工作,但是我需要完整的组件才能工作,以便可以对状态进行处理。否则我会原样使用它,无状态。
(旁注:不确定这是否是“ React-ful”,但在完整的React.Component的示例中,我仅使用props,从未设置任何要声明的内容。继续...)
完整版组件-unworking fiddle
class Posts extends React.Component {
constructor(props) {
super(props)
this.state = {};
this.posts = props.data;
}
render() {
return this.posts.map((post, index) => {
return (
<div className="comment" key={index}>
<div className="by">{post.by}</div>
<div className="id">{post.id}</div>
</div>
)
})
}
}
无状态功能-working fiddle
function Posts(props) {
let posts = props.data;
return posts.map((post, index) => {
return (
<div className="comment" key={index}>
<div className="by">{post.by}</div>
<div className="id"> {post.id}</div>
</div>
)
})
}
由于某些原因,完整的组件不会在无状态点击时重新呈现。我以为我解决了计时问题,但也许没有?组件类型是否确实导致事物损坏/工作?为什么?
我尝试使Posts
的构成方式与小提琴之间的唯一区别是,小提琴仍然很忙。希望能比在这里显示代码更有效地显示我的问题。
答案 0 :(得分:1)
道具或状态更新时,原因组件将重新渲染。在您的状态下,完整组件constructor
仅调用一次。所以this.post没有更新。您可以通过两种方式解决该问题
在道具组件更改时更改this.posts
componentWillReceiveProps (nextProps) {
this.posts = nextProps.posts
}
或直接在渲染中使用props.post
(效果更好)
return this.props.posts.map((post, index) => {...})
答案 1 :(得分:1)
class Posts extends React.Component {
constructor(props) {
super(props)
this.state = {};
}
render() {
return this.props.data.map((post, index) => {
return (
<div className="comment" key={index}>
<div className="by">{post.by}</div>
<div className="id">{post.id}</div>
</div>
)
})
}
}
首先尝试这样的事情,而不是初始化构造函数中的帖子。在您的情况下,可能我想在初始化this.posts
之前进行渲染