Reactjs 为什么使用refs会降低我的React应用程序的速度?
我需要在Redux中存储一些元素的引用,以便可以关注这些元素 我有一个下拉列表:Reactjs 为什么使用refs会降低我的React应用程序的速度?,reactjs,redux,Reactjs,Redux,我需要在Redux中存储一些元素的引用,以便可以关注这些元素 我有一个下拉列表: <BasicSelect selectRef={(e) => this.storeRef('make', e) } ... /> 因此,它应该存储ref一次,然后在比较后返回 但是,每次单击下拉列表中的选项时,应用程序都会挂起一个不将引用置于组件状态。组件状态应仅用于渲染时需要的内容,并应在更新它们时导致重新渲染。将参照直接保存到零部件实例
<BasicSelect
selectRef={(e) => this.storeRef('make', e) } ... />
因此,它应该存储ref一次,然后在比较后返回
但是,每次单击
下拉列表中的选项时,应用程序都会挂起一个不将引用置于组件状态。组件状态应仅用于渲染时需要的内容,并应在更新它们时导致重新渲染。将参照直接保存到零部件实例上:
<BasicSelect selectRef={selectInstance => this.selectInstance = selectInstance} />
this.selectInstance=selectInstance}/>
老实说,我也有点困惑什么是selectRef
作为道具,但我假设
组件将该ref转发到底层的
标记
无论如何,关键是每次调用
setState()
,都会导致不必要的重新渲染。不要这样做。这个.props.storeSelectRef是什么?控制台中有错误吗?挂起一整秒钟意味着某些事情非常非常错误,比如无限递归。为什么您觉得需要将ref存储在状态树中?在理想情况下,应该只有不可变的数据,dom引用几乎是不可变的。您可以将ref保留在组件的实例中,这样做更方便efficient@BenjaminGruenbaum将ref传递给redux以存储在其state@DayanMorenoLeon如果我将ref保存在组件的实例中,我将如何触发Redux中ref的focus()
方法?几乎是react-select组件的包装,是的,它在ref on上转发(ref有一个名为focus()
的方法,我想从redux触发该方法)。不过,我并没有将ref置于组件状态,而是将ref传递给redux。如果我要将ref存储在组件中,我将如何从其他地方调用ref上的方法?到底是什么事件会引起对输入的关注?在redux存储中存储ref肯定不是一个好办法。
storeRef(list, ref) {
return;
}
<BasicSelect selectRef={selectInstance => this.selectInstance = selectInstance} />