Javascript 如何访问其他组件道具。(反应)

Javascript 如何访问其他组件道具。(反应),javascript,html,reactjs,jsx,Javascript,Html,Reactjs,Jsx,认为我有一个组成部分: <Component1> <Component2 value={0}/> {window.console.log(Component2.value)} </Component1> {window.console.log(Component2.value)} 由于我在尝试访问该道具时遇到问题,因此如何执行此window.console.log操作。为什么不从组件1的状态访问该值 cla

认为我有一个组成部分:

    <Component1>
        <Component2 value={0}/>
        {window.console.log(Component2.value)}
    </Component1>

{window.console.log(Component2.value)}

由于我在尝试访问该道具时遇到问题,因此如何执行此window.console.log操作。

为什么不从
组件1的状态访问该值

class Component1 extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      counter: 0
    };
    this.incrementCounter = this.incrementCounter.bind(this);

  }


  incrementCounter() {
    this.setState(prevState => ({ counter: prevState.counter + 1 }));
  }



  render() {
    return (
      <View>
        <Component2
          incrementCounter={this.incrementCounter}
          counter={this.state.counter} />
        <Component3 counter={this.state.counter} />
      </View>
    )

  }
}

类组件1扩展了React.Component{
建造师(道具){
超级(道具);
此.state={
柜台:0
};
this.incrementCounter=this.incrementCounter.bind(this);
}
递增计数器(){
this.setState(prevState=>({counter:prevState.counter+1}));
}
render(){
返回(
)
}
}
最后,在组件2内部

<button onClick={this.props.incrementCounter}>
  click to increment counter
</button>

单击以增加计数器
这是React的第一条规则,子组件不会改变数据
它们通过传递给它们的方法与父组件对话。这也使数据流变得更好,实际上这就是您应该如何使用React。

为什么不从
组件1的状态访问该值

class Component1 extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      counter: 0
    };
    this.incrementCounter = this.incrementCounter.bind(this);

  }


  incrementCounter() {
    this.setState(prevState => ({ counter: prevState.counter + 1 }));
  }



  render() {
    return (
      <View>
        <Component2
          incrementCounter={this.incrementCounter}
          counter={this.state.counter} />
        <Component3 counter={this.state.counter} />
      </View>
    )

  }
}

类组件1扩展了React.Component{
建造师(道具){
超级(道具);
此.state={
柜台:0
};
this.incrementCounter=this.incrementCounter.bind(this);
}
递增计数器(){
this.setState(prevState=>({counter:prevState.counter+1}));
}
render(){
返回(
)
}
}
最后,在组件2内部

<button onClick={this.props.incrementCounter}>
  click to increment counter
</button>

单击以增加计数器
这是React的第一条规则,子组件不会改变数据
它们通过传递给它们的方法与父组件对话。这也使数据流变得更好,实际上这就是您应该如何使用React的方法。

基本上,您需要做的是将回调函数作为
属性传递给
,它返回更新到
的值(我做了一点StackBlitz=>),下面是示例:

import React,{Component}来自'React';
从'react dom'导入{render};
从“/Component2”导入组件2;
导入“/style.css”;
类Component1扩展了组件{
构造函数(){
超级();
此.state={
名称:“反应”
};
}
getUpdatedValue=(updatedValue)=>{
log('这是您的更新值:',updatedValue);
};
render(){
返回(

开始编辑以查看发生的奇迹:)

); } }
render(,document.getElementById('root'))
基本上,您需要做的是将一个回调函数作为
属性传递给您的
,它返回更新到
的值(我做了一点StackBlitz=>),下面是示例:

import React,{Component}来自'React';
从'react dom'导入{render};
从“/Component2”导入组件2;
导入“/style.css”;
类Component1扩展了组件{
构造函数(){
超级();
此.state={
名称:“反应”
};
}
getUpdatedValue=(updatedValue)=>{
log('这是您的更新值:',updatedValue);
};
render(){
返回(

开始编辑以查看发生的奇迹:)

); } }
render(,document.getElementById('root'))我认为你应该多读一些。这不是您应该如何从组件访问值。如果要记录值,应将
控制台.log
放入
组件2
中。您将把
属性
即“0”从
组件1
传递到
组件2
。您已经可以访问它了。component2的值在其中发生了变化,这只是一个示例。谢谢你的帮助。我想你应该多读一些书。这不是您应该如何从组件访问值。如果要记录值,应将
控制台.log
放入
组件2
中。您将把
属性
即“0”从
组件1
传递到
组件2
。您已经可以访问它了。component2的值在其中发生了变化,这只是一个示例。感谢您的帮助。因为它在component2中发生了更改。状态中的值是被动的,这意味着如果它在component2中发生更改,它也将更新Component3。这不是一个有效的论点,我想你不明白,我有第一个组件,它把状态传递给第二个组件,这个状态是第二个组件的初始值。但是在第二个组件内部,这个值会发生变化,因为它是一个计数器,在第二个组件内部发生所有过程之后,我必须读取它的响应,我需要读取组件2的新值。因为它在组件2内部发生变化。状态中的值是反应性的,意味着如果它在组件2中发生更改,它也将更新组件3。这不是一个有效的论点,我想你不明白,我有第一个组件,它把状态传递给第二个组件,这个状态是第二个组件的初始值。但是在第二个组件内部,这个值会发生变化,因为它是一个计数器,在第二个组件内部发生的所有过程之后,我必须读取它的响应,我需要读取组件2的新值。