将状态从一个组件传递到另一个组件的正确方法

IT技术 reactjs
2021-05-16 06:38:36

我让自己对 React 有点困惑。

我有一个主页“页面”,我将其分解为多个组件。所以,我有一个英雄组件,目前只有一个从 mongodb 中提取的标题。

所以,在主页上我有:

import React, { Component } from "react";
// the axios http request to the server
import { getHero } from "../services/heroService";

//state
class Home extends Component {
  state = {
    title: "",
  };

  async componentDidMount() {
    const response = await getHero();
    this.setState({ title: response.data.title });
  }

  render() {
    return (
      <React.Fragment>
        <Hero title={this.state.title} />
    );
  }
}
export default Home;

然后我的英雄组件:

import React, { Component } from "react";
import { Container } from "react-bootstrap";

class Hero extends Component {
  render() {
    const { title } = this.props;
    return (
      <section className="section-hero d-flex justify-content-center align-items-center mb-5">
        <Container className="text-center text-white">
          <h1>{title}</h1>
        </Container>
      </section>
    );
  }
}
export default Hero;

我只是想知道这是否是将数据从状态传递到另一个组件的正确方法。它似乎有效,但这并不意味着它是正确的。

2个回答

是的,这是正确的方法。

基本上在组件之间传递数据时,您可以有几种情况,以下是规范的“react方式”

  • <A>是 的父级<B>,数据从<A>to <B>(您的情况)流向:数据存储在 中A.state,并通过 props 传递:<B data={this.state.data}>
  • <A>是 的父级<B>,数据从<B><A>:数据存储在 中A.state,并且通过 props 传递一个侦听器:<B onDataChange={newData => this.updateData(newData)}>
  • <A>并且<B>是近亲并共享数据:数据存储在最近的共同祖先中,侦听器通过props传递(也就是提升状态
  • <A>并且<B>是独立的并共享数据:使用像Redux这样的状态容器

是的,这是将数据从父/容器组件传递到子组件的正确方法,如果您使用的是 redux,则只能将父/容器组件的 props 添加到存储中,而子/视图组件只能负责显示/显示数据。