React コンポーネントが値を渡す - コンポーネント間で値を渡す

コンポーネント間で値を渡す

コンテキスト オブジェクト -- コンテキスト オブジェクト

React コンポーネント間で渡されるデータは、props を介して渡されます。これは一方向の転送です。データは、props を介してレイヤーごとに親から子、孫に渡されます。コンポーネントはレイヤーごとにネストされる場合があります。つまり、これはメソッドはレイヤーごとに渡すのが面倒なのでレイヤーごとにジャンプしたい場合はコンテキストを使います

コンテキスト:コンテキストオブジェクト

コンテキストは、コンポーネント間で値を渡す複雑さを非常にうまく解決します。コンポーネント間でデータを迅速に転送できます。

コンテキストを使用してコンポーネント間で値を渡したい場合は、createContext() メソッドを使用する必要があります。このメソッドは次の 2 つのオブジェクトを提供します。

プロバイダ オブジェクト プロデューサ ----> データの生成に使用 コンシューマ オブジェクト コンシューマ ----> データの使用に使用

import React, { Component } from 'react'
// 1.创建context对象
const GlobalContext = React.createContext()
​
class Zia extends Component {
    render() {
        return (
            <div>
                我是第一个子组件
            </div>
        )
    }
}
class Zib extends Component {
    render() {
        return (
​
            <div>
                我是第2个子组件
                {/* 3.任意组件引入GlobalContext并调用context,使用GlobalContext.Consumer(消费者) */}
​
                <GlobalContext.Consumer>
                    {/* 4.在回调函数中直接使用生产者的数据 */}
                    {
​
                        (value) => {
                            return <h1>{value.name}</h1>
                        }
                    }
                </GlobalContext.Consumer>
            </div>
​
        )
    }
}
export default class fu extends Component {
    render() {
        return (
            // 2.在根组件件引入GlobalContext,并使用GlobalContext.Provider生产者
            // 并且使用value属性传入数据
            <GlobalContext.Provider value={
   
   { name: "xixi", age: 18 }}>
                <div>
                    我是根组件
                    <Zia />
                    <Zib />
                </div>
            </GlobalContext.Provider>
        )
    }
}
 
 

関数コンポーネントはコンテキスト オブジェクトを使用します

React16.8以降、フックという新機能が追加されました。そのうちの 1 つは useContext で、関数コンポーネントでのコンテキスト オブジェクトの使用の複雑さを簡素化できます。

useContext

コンテキスト オブジェクト (React.createContext の戻り値) を受け取り、コンテキストの現在の値を返します。

コンテキスト オブジェクトの Consumer コンシューマー内のデータを直接取得できます(コンシューマーの使用の複雑さを簡素化します)。

使用しないときにコンポーネント間で値を渡す

import React, { createContext } from 'react'
let context = createContext()
function Sun() {
    return (
        <div>
            孙
            <context.Consumer>
                {
                    (value)=>{
                        return (
                            <h1>{value.name}</h1>
                        )
                    }
                }
            </context.Consumer>
        </div>
    )
}
​
function Zi() {
    return (
        <div>
            子
            <Sun></Sun>
        </div>
    )
}
​
export default function Fu() {
    return (
        <context.Provider value={
   
   {name:"xixi",age:18}}>
            <div>
                父
                <Zi></Zi>
            </div>
        </context.Provider>
    )
}
​

useContext を使用する

import React, { createContext,useContext } from 'react'
let context = createContext()
function Sun() {
    // 使用useContext可以直接得到Consumer中的数据
    let value=useContext(context)
    return (
        <div>
            孙
            <h1>{value.name}</h1>
        </div>
    )
}
​
function Zi() {
    return (
        <div>
            子
            <Sun></Sun>
        </div>
    )
}
​
export default function Fu() {
    return (
        <context.Provider value={
   
   {name:"xixi",age:18}}>
            <div>
                父
                <Zi></Zi>
            </div>
        </context.Provider>
    )
}
​

戻ってきた

リダックスの使用

おすすめ

転載: blog.csdn.net/m0_64186396/article/details/131984457