Javascript 反应:装载后如何读取DOM?
在我的React组件中,我需要从DOM中读取数据,以便应用程序的后续部分可以使用。我需要将数据持久化到状态,并通过发送一个动作通过Flux发送数据。有这样做的最佳实践吗 更具体地说,我至少在两种情况下需要来自DOM的数据:Javascript 反应:装载后如何读取DOM?,javascript,dom,reactjs,flux,Javascript,Dom,Reactjs,Flux,在我的React组件中,我需要从DOM中读取数据,以便应用程序的后续部分可以使用。我需要将数据持久化到状态,并通过发送一个动作通过Flux发送数据。有这样做的最佳实践吗 更具体地说,我至少在两种情况下需要来自DOM的数据: 视觉上即时的,正如用户看到的第一件事情应该是“正确的”,这涉及到基于从DOM读取的数据的计算 以后使用的数据(例如用户移动鼠标),但基于初始DOM状态 请考虑以下事项: 我需要从DOM中读取并保存数据。此DOM在componentDidMount中可用,但是我无法在co
- 视觉上即时的,正如用户看到的第一件事情应该是“正确的”,这涉及到基于从DOM读取的数据的计算
- 以后使用的数据(例如用户移动鼠标),但基于初始DOM状态
请考虑以下事项:
- 我需要从DOM中读取并保存数据。此DOM在
中可用,但是我无法在componentDidMount
中分派操作,因为这将在分派过程中发生分派错误。因此,在React中,在componentDidMount
组件*装载中调度是一种反模式
- 对于上述问题,通常的解决方法(hack)是在
调用中将分派放在setTimeout(…,0)
中我想避免这种情况,因为它看起来纯粹是一种绕过Flux错误的黑客行为。如果真的没有更好的答案,我会接受,但不情愿componentDidMount
- 回答这个问题时不要使用不要阅读DOM。这与我的问题无关。我知道这会将我的应用程序连接到DOM,我知道这不是我想要的。同样,我问的问题与我是否应该使用这种方法无关
- 以下是我在回流中使用的模式
导出默认类AppCtrl扩展AppCtrlRender{
构造函数(){
超级();
this.state=getAllState();
}
componentDidMount=()=>{
//log('AppCtrl componentDidMount');
this.unsubscribeApp=AppStore.listen(this.appStoreDidChange);
this.unsubscribeGS=GenusSpeciesStore.listen(this.gsStoreDidChange);
Actions.setWindowDefault(窗口);
}
componentWillUnmount=()=>{this.unsubscribeApp();this.unsubscribes();}
appStoreDidChange=()=>{this.setState(getAppState());}
gsStoreDidChange=()=>{this.setState(getGsState());}
shouldComponentUpdate=(nextProps,nextState)=>{
返回nextState.appStoreChanged&&nextState.gsStoreChanged;
}
}