• 作者:老汪软件技巧
  • 发表时间:2024-09-29 21:01
  • 浏览量:

详细步骤

初始状态:

第一次汇报:

第二次汇报:

小结兄弟传值

对于同级组件之间进行的传值我们可以通过父组件进行中转,我们还是来看例子

还是小宝,没错,这是个连续剧。。。

小宝想告诉正在外地上大学的哥哥自己考了100分的这件事,但是自己没有手机不能直接联系,这时候就要向父母求助了。

代码解释1. Child1 组件(哥哥)

function Child1(props) {
  return <div>哥哥接收到的信息 --- {props.received}div>;
}

2. Child2 组件(小宝)

function Child2(props) {
  const score = "小宝考了一百分!";
  return (
    <div>
      小宝---<button onClick={() => props.tellParent(score)}>告诉哥哥button>
    div>
  );
}

3. Parent 组件(父母)

import { useState } from "react";
export default function Parent() {
  const [message, setMessage] = useState();
  const getData = (data) => {
    setMessage(data);
  };
  return (
    <div>
      <h2>Parenth2>
       {console.log({ score })}
      <Child1 received={message}>Child1>
      <Child2 tellParent={getData}>Child2>
    div>
  );
}

情景剧剧本第一幕:初始状态第二幕:小宝告诉哥哥成绩

详细步骤

初始状态:

点击按钮:

更新状态:

显示消息:

小结祖孙传值

由于祖孙传值的方式有多种,这里我们就不采用情景剧进行模拟了。

在React中,祖孙组件传值可以通过以下几种方式实现:

1. 通过props进行传值

通常在比较简单的情况,祖父组件会通过props将数据传递给父组件,父组件再将其传递给子组件。以下是一个隔代向子组件传值的简单示例:

//Grandfather.jsx
import React from "react";
const Grandfather = () => {
  const data = "Grandfather的数据";
  return (
    <div>
      <h2>Grandfatherh2>
      {data}
    div>
  );
};
export default Grandfather;

// Father.jsx
import React from "react";
import Grandfather from "./Grandfather";
export default function Father(props) {
  return (
    <div>
      <h3>Fatherh3>
      <Grandfather data={props.data}>Grandfather>
    div>
  );
}

// Son.jsx
import React from "react";
import Father from "./Father";
export default function Son(props) {
  return (
    <div>
      <h4>Sonh4>
      <Father data={props.data} />
    div>
  );
}

2. 使用Context API

如果数据需要在多个层级的组件之间共享,可以使用Context API。

核心概念createContext()

createContext 是 React 中的一个函数,它用于创建一个 Context 对象。这个对象包括两个主要的部分:

const MyContext = React.createContext();

Provider(数据提供者)

Provider 是用来提供数据的组件。它接收一个 value 属性,所有包裹在 Provider 组件内的组件都可以访问到这个 value,无论它们在组件树中有多深。

<MyContext.Provider value={/* 传递的值 */}>
  {/* 子组件 */}
MyContext.Provider>

Consumer(数据消费者)

Consumer 用来获取 Provider 提供的 value。虽然可以直接使用 Consumer 来消费 Context,但 React 更常用 useContext 钩子来获取 Context 的值,写法更加简洁。

<MyContext.Consumer>
  {value => /* 使用 value */}
MyContext.Consumer>

或者使用更现代的 useContext:

const value = useContext(MyContext);

使用步骤创建 Context:用 createContext() 创建一个 Context 对象。提供数据:使用 Context.Provider 提供数据,通常包裹在应用的顶层。消费数据:在需要使用数据的地方通过 useContext 获取这样可以避免层层传递props。以下是一个简单的示例:

import React from "react";
import { createContext } from "react";
const { Provider, Consumer } = createContext();
function Son() {
  return (
    <div>
      <h4>Son区域h4>
      {/* 在需要接收Grandfather的数据的组件中,添加Consumer */}
      <Consumer>
        {(value) => (
          <h4 style={{ backgroundColor: "lightpink" }}>Son接收的{value}h4>
        )}
      Consumer>
    div>
  );
}
function Father() {
  return (
    <div>
      <h3>Father区域h3>
      <Son>Son> 
      <Consumer>
        {(value) => (
          <h4 style={{ backgroundColor: "red" }}>Father接收的{value}h4>
        )}
      Consumer>
    div>
  );
}
export default function Grandfather() {
  const data = "Grandfather的数据";
  return (
    <div>
      <h2>Grandfatherh2>
      {/*用Provider进行数据提供,让Grandfather中的后代组件都可以接收*/}
      <Provider value={data}>
        <Father />
      Provider>
    div>
  );
}

小结

以上就是本文全部内容,希望对你理解React组件传值有所帮助,感谢你的阅读!