[英]React - changing key prop doesn't cause rerender of child component
我正在使用react-infinite-scroll来呈现数据源。 每当用户更改他们的设置时,我都想刷新数据源。
为此,我有一个用于InfiniteScroll
组件的关键道具。 这个想法是每当用户更改他们的设置时
this.state.renderCount
在setState
增加 1 React 注意到InfiniteScroll
的 key prop 不同,从头开始重新渲染组件。
<Content style={{ padding: "0px 20px" }}> <InfiniteScroll key={this.state.renderCount} style={{ width: "100%", height: "100%" }} pageStart={0} loadMore={this.loadPosts.bind(this)} hasMore={true} loader={<div>Loading....</div>} useWindow={false} > {listItems} </InfiniteScroll> </Content>
刷新代码在componentDidUpdate
,如果我确定需要刷新,就会调用它:
this.setState({ renderCount: this.state.renderCount + 1 })
但是,不会重置该组件。 为什么是这样?
key
和ref
是 react 中的特殊关键字。 看
JSX 元素上的大多数 props 都传递给组件,但是,有两个特殊的 props(ref 和 key)被 React 使用,因此不会转发到组件。
例如,尝试从组件(即渲染函数或 propTypes)访问 this.props.key 未定义。 如果您需要访问子组件中的相同值,则应将其作为不同的 prop 传递(例如:
<ListItemWrapper key={result.id} id={result.id} />
)。 虽然这似乎是多余的,但将应用程序逻辑与协调提示分开很重要。
要将它们的key
prop 传递给子元素,请使用另一个名称。
另请参阅: 为什么 ref 不是子组件中的属性?
原来是我多虑了。
通过 react-infinite-scroll 的工作方式,我只需要清除listItems
数组。
就我而言,我只需要这样做:
this.setState({ templates: [] })
( listItems
由将模板映射到 jsx 的映射函数生成)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.