<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      React Context使用

      組件跨層級通信Context,類比Vue中的provider,Inject。

      場景:一鍵換膚,切換地區

      1,Context.js

      API:

      React.createContext

      創建一個Context對象,當React渲染一個訂閱了這個Context對象的組件,這個租金會從組件樹中離自身最近的那個匹配的Provider中讀取到當前的Context的值。

      Context.Provider

      Provider接受一個value屬性,傳遞給消費組件,允許消費組件訂閱context的變化。一個Provider可以和多個消費組件有對應關系。多個Provider也可以嵌套使用,里層的會覆蓋外層的數據。

      當Provider的value值發生變化時,它內部的所有消費組件都會重新渲染。Provider及其內部consumer組件都不受制于shouldComponentUpdate函數,因此當Consumer組件在其祖先組件退出更新的情況下也能更新。

      Class.contextType

      Context.Consumer

      消費者

      useContet

      import React from "react";
      
      export const ThemeContext = React.createContext({themeColor: "pink"});
      export const ThemeProvider = ThemeContext.Provider; //提供者
      export const ThemeConsumer = ThemeContext.Consumer; //消費者
      
      export const UserContext = React.createContext();
      export const UserProvider = UserContext.Provider;
      export const UserConsumer = UserContext.Consumer;

       

      2,ContextPage.js

      ConsumerPage在<ThemeProvider>的服務區內,必須是Provider的子組件
      import React, {Component} from "react";
      import {ThemeProvider, UserProvider, UserContext} from "../Context";
      import ConsumerPage from "./ConsumerPage";
      import UseContextPage from "./UseContextPage";
      
      export default class ContextPage extends Component {
        constructor(props) {
          super(props);
          this.state = {
            theme: {
              themeColor: "red"
            },
            user: {name: "xiaoming"}
          };
        }
        render() {
          const {theme, user} = this.state;
          return (
            <div>
              <h3>ContextPage</h3>
              <ThemeProvider value={theme}>
                <UserProvider value={user}>
                  <ConsumerPage /> 
                  <UseContextPage />
                </UserProvider>
              </ThemeProvider>
            </div>
          );
        }
      }

       

      3, ConsumerPage.js

      接受一個參數返回一個組件

      包在<ThemeConsumer>里面,代表是人家的用戶

      import React, {Component} from "react";
      import {ThemeConsumer, UserConsumer} from "../Context";
      
      export default class ConsumerPage extends Component {
        render() {
          return (
            <div>
              <h3>ConsumerPage</h3>
              <ThemeConsumer> 
                {themeContext => (
                  <div className={themeContext.themeColor}>
                    omg
                    <UserConsumer>
                      {userContext => <Child {...userContext} />}
                    </UserConsumer>
                  </div>
                )}
              </ThemeConsumer>
            </div>
          );
        }
      }
      
      function Child(props) {
        return <div>{props.name}</div>;
      }

       

      4,UseContextPage.js

      import React, {useContext} from "react";
      import {ThemeContext, UserContext} from "../Context";
      
      export default function UseContextPage(props) {
        const {themeColor} = useContext(ThemeContext);
        const {name} = useContext(UserContext);
      
        return (
          <div className="border">
            <h3 className={themeColor}>UseContextPage</h3>
            <p>{name}</p>
          </div>
        );
      }

       

      總結:

      三種使用方式,contextType, Consumer和useContext。

      區別:

      ContextType,使用簡單,必須用在類組件上,只能通過該API訂閱單一context.

      Consumer,最廣泛使用的

      useContext,Hook方法,只能用在函數組件當中或者自定義的Hook當中。

       

       

      react-redux用到Context,react-redux的<Provider />就是通過Context提供一個全局態的store,路由租金react-router通過Context管理路由狀態等。

      在React組件開發中,如果用好Context,可以讓你的組件變得強大,而且靈活。

      posted @ 2020-07-27 08:18  starof  閱讀(959)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 骚虎视频在线观看| 亚洲成人av在线资源网| 深夜精品免费在线观看| 99精品热在线在线观看视| 国产明星精品无码AV换脸| 免费无码黄十八禁网站| 亚洲悠悠色综合中文字幕| 在线看免费无码的av天堂| 国产三级精品片| 久久婷婷五月综合色一区二区 | 国产亚洲精品久久久久婷婷瑜伽| 高颜值午夜福利在线观看| 来宾市| 新久久国产色av免费看| 国语精品自产拍在线观看网站| 亚洲欧美激情在线一区| 自拍偷在线精品自拍偷免费| 人人爽人人爽人人片a免费| 成人网站免费观看永久视频下载| 韩日午夜在线资源一区二区 | 亚洲中文字幕国产综合| 94人妻少妇偷人精品| 亚洲成人网在线观看| 欧美性猛交xxxx富婆| 国产色悠悠在线免费观看| 妇女性内射冈站hdwww000| 亚洲av伊人久久综合性色| 国产精品av中文字幕| 国产午夜亚洲精品国产成人| 激情综合五月| 99中文字幕精品国产| 激情综合网激情综合| 中文字幕一区二区人妻| 日本欧美一区二区三区在线播放| 桃花岛亚洲成在人线AV| 国内精品久久久久影院蜜芽| 日产中文字幕在线精品一区 | 国产91精品调教在线播放| 五月天激情国产综合婷婷婷| 国产激情一区二区三区四区 | 一本色道久久东京热|