React中的context 数据传递

1.定义 js文件

import React from 'react'

/**
 *
 * Context 相当于一个公共的存储空间,
 *      我们可以将多个组件中都需要访问的数据统一存储到一个Context中,
 *      这样无需通过props逐层传递,即可使组件访问到这些数据
 *      
 *      通过React.createContext()创建context
 */

  const TestContext = React.createContext({
        name:'孙悟空',
        age:18,

    })

  export default TestContext;
 
 
2.使用context(一.)
 
import React from 'react'
import TestStore from '../store/testContext.js'
export default function TestContext() {
  return (
    <TestStore.Consumer>
        {(ctx)=>{
           return (
            <div>
                {ctx.name}
            </div>
           )
        }}
    </TestStore.Consumer>
  )
}
 
3.使用context(二.使用钩子函数)
 
import React from 'react'
import { useContext } from 'react'
import TestStore from '../store/testContext'

export default function TestContext() {
    const ctx=useContext(TestStore)
     /**
     *
     * 使用Context方式二:
     *      1.导入Context
     *      2.使用钩子函数useContext()获取到context
     */
  return (
   
    <div>

        <h3>{ctx.name}</h3>

    </div>

  )
}
 
4.通过.Provider value属性 修改Context中的值 子类继承获取修改后的值
 
import React from 'react'
import { useState,useContext } from 'react'
import Context from '../store/testContext.js'
import TestContext from './TestContext.jsx'
export default function A() {
    const [cartData,setCartData]=useState({
        items:[],
        totalAmount:0,
        totalPrice:0
    })
  //const {addItem,removeItem}=useContext(Context)

    const addItem=()=>{
        const newCart={...cartData}
        newCart.totalAmount+=1
        setCartData(newCart)
    }

    const removeItem=()=>{

    }

  return (
    <div>
    //父类通过value修改
        <Context.Provider value={ {...cartData,age:1300,name:'沙和尚', addItem,removeItem } }>
    //子类将接收到 value中修改之后的值
        <TestContext></TestContext>  
        </Context.Provider>
    </div>
  )
}


//或者如下简洁表述:
import React, { useState, createContext, useContext } from "react"; 
const CountContext = createContext(0);
const Example = () => {
  const [count, setCount] = useState<number>(0);
  return (
    <div>
      <p>父组件点击数量:{count}</p>
      <button onClick={() => setCount(count + 1)}>{"点击+1"}</button>
      <CountContext.Provider value={count}>
        <Counter />
      </CountContext.Provider>
    </div>
  );
};
//页面中嵌套的子组件中使用 Context 传递的值
const Counter = () => {
  const count = useContext(CountContext);
  return <p>子组件获得的点击数量:{count}</p>;
};

export default Example;
 
posted @   方方面  阅读(545)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示