React中createContext和useContext的使用-实例

在demo中,我可以通过全局组件传递一个属性改变按钮的颜色,当父组件改变color颜色时,子组件也随之改变颜色

当组件上层最近的 <MyContext.Provider> 更新时,该 Hook 会触发重渲染,并使用最新传递给 MyContext provider 的 context value 值。即使祖先使用 React.memo 或 shouldComponentUpdate,也会在组件本身使用 useContext 时重新渲染 查看原文

  • ThemeContext.tsx
import React from "react";

const ThemeContext = React.createContext('light');
export default ThemeContext

  • index.tsx
import ThemedButton from './ThemedButton'
import React from "react";
import Context from './ThemeContext'

function Toolbar(props) {
  // Toolbar 组件接受一个额外的“theme”属性,然后传递给 ThemedButton 组件。
  // 如果应用中每一个单独的按钮都需要知道 theme 的值,这会是件很麻烦的事,
  const obj = React.useContext(Context);
  // 因为必须将这个值层层传递所有组件。
  console.log(obj);
  return (
    <div>
      <ThemedButton />
    </div>
  );
}

class App extends React.Component {
  state = {
    color:'red'
  }

  changeColor = ()=>{
    this.setState({
      color:'pink'
    })
  }
  render() {
    return <div>
      <Context.Provider value={ this.state.color }>
        <Toolbar />
      </Context.Provider>

      <Button onClick={this.changeColor}>改变颜色</Button>
    </div>;
  }
}
export default App

  • 引用 ThemedButton.tsx
import React from "react";
// @ts-ignore
import context from './ThemeContext'
import { Button } from "antd";

function MyButton() {
  const obj = React.useContext(context);
  console.log(obj);

  return <div>
    <Button style={{color:obj}} >我是按钮</Button>
  </div>;

}
export default MyButton

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值