Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 反应:装载后如何读取DOM?_Javascript_Dom_Reactjs_Flux - Fatal编程技术网

Javascript 反应:装载后如何读取DOM?

Javascript 反应:装载后如何读取DOM?,javascript,dom,reactjs,flux,Javascript,Dom,Reactjs,Flux,在我的React组件中,我需要从DOM中读取数据,以便应用程序的后续部分可以使用。我需要将数据持久化到状态,并通过发送一个动作通过Flux发送数据。有这样做的最佳实践吗 更具体地说,我至少在两种情况下需要来自DOM的数据: 视觉上即时的,正如用户看到的第一件事情应该是“正确的”,这涉及到基于从DOM读取的数据的计算 以后使用的数据(例如用户移动鼠标),但基于初始DOM状态 请考虑以下事项: 我需要从DOM中读取并保存数据。此DOM在componentDidMount中可用,但是我无法在co

在我的React组件中,我需要从DOM中读取数据,以便应用程序的后续部分可以使用。我需要将数据持久化到状态,并通过发送一个动作通过Flux发送数据。有这样做的最佳实践吗

更具体地说,我至少在两种情况下需要来自DOM的数据:

  • 视觉上即时的,正如用户看到的第一件事情应该是“正确的”,这涉及到基于从DOM读取的数据的计算
  • 以后使用的数据(例如用户移动鼠标),但基于初始DOM状态

请考虑以下事项:

  • 我需要从DOM中读取并保存数据。此DOM在
    componentDidMount
    中可用,但是我无法在
    componentDidMount
    中分派操作,因为这将在分派过程中发生分派错误。因此,在React中,在
    组件*装载中调度是一种反模式
  • 对于上述问题,通常的解决方法(hack)是在
    setTimeout(…,0)
    调用中将分派放在
    componentDidMount
    我想避免这种情况,因为它看起来纯粹是一种绕过Flux错误的黑客行为。如果真的没有更好的答案,我会接受,但不情愿
  • 回答这个问题时不要使用不要阅读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;
      }
      }