Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.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 从另一个组件修改组件类变量_Javascript_Reactjs_React Native - Fatal编程技术网

Javascript 从另一个组件修改组件类变量

Javascript 从另一个组件修改组件类变量,javascript,reactjs,react-native,Javascript,Reactjs,React Native,我在组件中的Hue类中有一个变量: export default class Hue extends Component { state = { toggleState : false, toggleWhite : false } render(){...} ... } 在这个组件中,我可以修改如下值:this.state.toggleState=true 我有另一个处理websocket连接的组件,当我收到数据时,我想修改Hue类中的数据。但是,即

我在组件中的
Hue
类中有一个变量:

export default class Hue extends Component {


  state = {
    toggleState : false,
    toggleWhite : false
  }


      render(){...}
...
}
在这个组件中,我可以修改如下值:
this.state.toggleState=true

我有另一个处理websocket连接的组件,当我收到数据时,我想修改
Hue
类中的数据。但是,即使我在websocket组件中导入
Hue
,我也无法修改该值

我已经尝试过:
Hue.state.toggleState=true
,但这是未定义的

我如何从另一个组件访问和修改值,或者是否有解决此问题的其他解决方案


谢谢。

如果色调组件是websocket组件的父级,则可以向websocket组件传递一个函数,以便在更新数据时运行

        <WebSocketHandlingComponent
          onUpdate={latestData => {
            this.setState({toggleState: latestData.toggleState});
          }}
        />
{
this.setState({toggleState:latestData.toggleState});
}}
/>

不过,目前还不清楚你的应用程序是否就是这样构造的。如果树的不同级别上有多个组件需要访问相同的数据,则可能需要适当的状态管理解决方案,例如
redux

如果色调组件是websocket组件的父级,则可以向websocket组件传递一个函数,以便在更新数据时运行

        <WebSocketHandlingComponent
          onUpdate={latestData => {
            this.setState({toggleState: latestData.toggleState});
          }}
        />
{
this.setState({toggleState:latestData.toggleState});
}}
/>

不过,目前还不清楚你的应用程序是否就是这样构造的。如果在树的不同级别有多个组件需要访问相同的数据,则可能需要适当的状态管理解决方案,例如
redux

2种方法:将toggleState作为属性,并在呈现色调或共享状态时将web套接字设置为该属性,如果使用redux,它们基本上会从同一个减速机获取状态。这并不能回答您的问题,但永远不要直接更改您的状态(即
This.state.toggleState=true
)。这样做不会触发组件diddupdate,因此不会重新渲染。正确的方法是调用
this.setState({toggleState:true})
。请参阅。如何在@floor中执行此操作?2种方法:将toggleState作为属性,并让web套接字在渲染色调或共享状态时设置该属性,如果使用redux,则它们基本上会从同一个减缩器中获取状态。这并不能回答您的问题,但决不能直接更改您的状态(即
this.state.toggleState=true
)。这样做不会触发组件diddupdate,因此不会重新渲染。正确的方法是调用
this.setState({toggleState:true})
。请看。如何在@floor中执行此操作?它可以工作,但每次我触发setState函数时(使用
this.props.onUpdate(myvalue))
,它会被触发两次,比如2次,然后4次,然后8..16..32等。我如何限制一个触发器?Nervermind,这与它是从我的身份验证套接字函数中触发的事实有关。导致每次执行两次。它可以工作,但每次我触发setState函数时(使用
this.props.onUpdate(myvalue)
,它会被触发两次,比如2次,然后4次,然后8..16..32等。我如何限制一次触发?Nervermind,这与它是从我的身份验证套接字函数中触发的事实有关。导致每次执行两次。