Reactjs 我可以在一个组件中使用shouldComponentUpdate,并且在它的祖先中有一个键道具吗?

Reactjs 我可以在一个组件中使用shouldComponentUpdate,并且在它的祖先中有一个键道具吗?,reactjs,Reactjs,我的一个组件有一个键道具,在满足某些条件时触发渲染: <MyComponent key={ key }> <NestedComponent /> </MyComponent> InfiniteViewManager组件基本上是这样实现的: <InfiniteViewPager checksum={ myChecksum } bufferSize={ 2 } renderPageAtIndex={ myRenderPageFunction

我的一个组件有一个
道具,在满足某些条件时触发渲染:

<MyComponent key={ key }>
  <NestedComponent />
</MyComponent>
InfiniteViewManager
组件基本上是这样实现的:

<InfiniteViewPager
  checksum={ myChecksum }
  bufferSize={ 2 }
  renderPageAtIndex={ myRenderPageFunction }
  onPageSelected={ onPageSelectedCallback }
/>
<ViewPagerAndroid
  key={ this.props.checksum }
  initialPage={ this.props.bufferSize }
  onPageSelected={ this.props.onPageSelected } 
>
    { range(bufferSize * -1, bufferSize).map( i => this.props.renderPageAtIndex(i) ) }
</ViewPagerAndroid>

{range(bufferSize*-1,bufferSize).map(i=>this.props.renderPageAtIndex(i))}
当用户导航时,我需要将下一项设置为当前项,以便可以导航无限序列(这是
onPageSelected
回调的工作)。因此,
属性:如果我不设置它,页面不会在nav上重新呈现

该组件工作正常,但我希望避免重新呈现每个页面都包含的组件,因为它非常昂贵。有什么想法吗


非常感谢你的帮助

为密钥使用ID。每个部件的
键应是唯一的。除非您绝对知道列表永远不会更改(如静态表),否则您永远不会将迭代器中的数字(如
forEach()
)用作
键。

请为键使用ID。每个部件的
键应是唯一的。除非您绝对知道列表永远不会更改(如静态表),否则您永远不会使用迭代器中的数字(如
forEach()
)作为
键。

如果您不使用
key
作为迭代器,请尝试使用
id
或类似工具。我以前在没有显式迭代时使用
道具名称时遇到过问题;无法找到它是React关键字的文档(虽然看起来不太激烈),但它的行为似乎与React关键字类似。这是一支笔,上面写着我无法重新编程,但如果你用
键替换
I
,它确实会断:@lux谢谢你的评论!是的,你的权利。您的代码笔显示更新密钥道具会导致组件再次安装而不更新。此外,现在禁止从组件访问关键道具。我想我应该针对我的具体用例重新表述我的问题,因为在
ViewPagerAndroid
上使用关键道具是更新其children@lux:检查后,当您更新密钥时,组件不会再次装入,但如果我很了解文档,跳过对账生命周期挂钩:如果您没有使用
作为迭代器,请尝试使用
id
或类似的工具。我以前在没有显式迭代时使用
道具名称时遇到过问题;无法找到它是React关键字的文档(虽然看起来不太激烈),但它的行为似乎与React关键字类似。这是一支笔,上面写着我无法重新编程,但如果你用
键替换
I
,它确实会断:@lux谢谢你的评论!是的,你的权利。您的代码笔显示更新密钥道具会导致组件再次安装而不更新。此外,现在禁止从组件访问关键道具。我想我应该针对我的具体用例重新表述我的问题,因为在
ViewPagerAndroid
上使用关键道具是更新其children@lux:检查后,当您更新密钥时,组件不会再次装入,但如果我很了解文档,已跳过对账生命周期挂钩:感谢您的回答!我在页面迭代器中使用基于ID的键,而不是在数组中使用它们的索引。顶级组件的关键是在更新其子组件时使用
ViewPagerAndroid
进行必要的破解。感谢您的回答!我在页面迭代器中使用基于ID的键,而不是在数组中使用它们的索引。顶级组件的关键是在更新其子组件时使用
ViewPagerAndroid
进行必要的攻击。