React Context

2021-02-20  本文已影响0人  Su9527

Context 提供了一个无需为每层组件手动添加 props,就能在组件树间进行数据传递的方法。

在一个典型的 React 应用中,数据是通过 props 属性自上而下(由父及子)进行传递的,但这种做法对于某些类型的属性而言是极其繁琐的(例如:地区偏好,UI 主题),这些属性是应用程序中许多组件都需要的。Context 提供了一种在组件之间共享此类值的方式,而不必显式地通过组件树的逐层传递 props。

Context的使用场景

Context 是为了在一个组件树内部共享"全局"的数据而设计的, 因此当涉及一些全局可能需要获取的数据可以考虑使用Context, 例如: 当前用户的认证、页面属性、首先语言等等.

使用之前的考虑

  1. 谨慎使用Context, 因为这会使得组件之间的复用性变差.
  2. 如何避免组件间props的层层传递问题?

API

React.createContext
Context.Provider
Context.Consumer
Class.contextType
Context.displayName

获取Context的方法?

  1. 使用 Content 提供的 Consumer 组件
  2. 使用 useContext
    useContext 函数是 React Hooks 三大基础 hooks函数之一.
    import React from 'react';
    import AppContext from '../../common/context';
    
    //  获取Context的值;
    const context = React.useContext(AppContext);
    

Examples

Attentions

1. 重复渲染问题
class App extends React.Component {
    render() {
        return (
            <MyContext.Provider value={{something: 'something'}}>
                <Toolbar />
            </MyContext.Provider>
        );
    }
}
class App extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
           value: {something: 'something'},
        };
    }

    render() {
        return (
            <Provider value={this.state.value}>
                <Toolbar />
            </Provider>
        );
    }
}
2. 不依赖 ReactDOM
上一篇 下一篇

猜你喜欢

热点阅读