javascript - 如何访问另一个组件的状态

标签 javascript reactjs

我有带有 header 组件的主组件,我如何访问主组件中的 header 状态,这里是示例

Header.JS

class Header extends React.Component {
    constructor(props){
        super(props);
        this.state = {
            pageNumber: 1
        }
    }
  render() {
    return (
      <div className="shopping-list">
        <ul>
          <li>Instagram</li>
          <li>WhatsApp</li>
          <li>Oculus</li>
        </ul>
      </div>
    );
  }
}

Home.js

import React, {Component} from 'react';
import Header from './header';

class App extends Component {

    render() {
        return (
            <div>
             <Header /> // I need to use the states of Header in this component
            </div>
        )
    }
}

export default App;

我需要在 Home 组件中使用 Header 的状态,可以吗?

这种方式对性能有好处吗? 谢谢

最佳答案

您需要使用state lifting .

定义一个方法,例如Header 组件中的 liftTheState 将通过使用所需数据调用 Home 组件方法来提升 Header 组件的状态。

class Header extends React.Component {
    constructor(props){
        super(props);
        this.state = {
            pageNumber: 1
        }
    }

  liftTheState=()=>{

      this.props.callHomeMethod(this.state.pageNumber);
  }
  render() {
    //...
  }
}

在家里:

定义一个方法,例如Home 组件中的 callHomeMethod 将保存 Header 组件数据并将方法作为 prop 传递给 Header 组件

class App extends Component {

    callHomeMethod = (someDataFromHeader)=>{


    }
    render() {
        return (
            <div>
             <Header  callHomeMethod = {this.callHomeMethod}/> // pass Home method here used for state lifting.
            </div>
        )
    }
}

关于javascript - 如何访问另一个组件的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48849813/

相关文章:

javascript - Web 和移动设备中的滚动条

javascript - React - 开发和生产中的环境变量

javascript - 检测div滚动条是否触顶

javascript - 使用 Jest 触发方法后检查 Vue 组件数据

javascript - B 做某事时如何更改 A 的 html 站点

javascript - 如果我两次使用相同的 react/redux 组件,它们会共享状态吗?

reactjs - 不变失败 : You should not use <Route> outside a <Router>

javascript - 语义 UI 下拉表单未发送

javascript - 如何编辑 NPM 安装的文件?

javascript - 直接在 JSX 中设置样式,当值改变时改变