• 小白快速上手的react.js教程


    小白快速上手的react.js教程

    学习一下技术总结大概一下主要组成部分

    1、组件通信

    2、组件生命周期

    3、路由

    3、数据的状态管理等

    4、webpack等打包工具

    进阶

    脚手架,语言一系列原理

    本文还是从官网挑选的常用API, 例子也是官网的,详细可以移步官网

    点击学习 https://zh-hans.reactjs.org/docs/getting-started.html

    预备系列:

    安装脚手架,启动项目

    一、状态提升

    二、Context

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

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

     看一下具体的例子

    一般传props传参数

    import React from 'react';
    // import React, {Component} from 'react';
    // import ReactDOM from 'react-dom';
    import './App.css';
    
    
    class App extends React.Component{
        render() {
            return <Toolbar  theme="dark" />;
        }
    }
    
    function Toolbar(props){
         console.log('toolbar--', props)
        // Toolbar 组件接受一个额外的“theme”属性,然后传递给 ThemedButton 组件。
        // 如果应用中每一个单独的按钮都需要知道 theme 的值,这会是件很麻烦的事,
        // 因为必须将这个值层层传递所有组件。
        return (
            <div>
                <ThemeButton theme={props.theme} />;
            </div>
        )
    
    }
    
    class ThemeButton extends React.Component{
    
        render (){
            console.log('ThemeButton', this.props)
            return <button theme={this.props.theme}> theme 测试</button>
        }
    } 
    
    export default App;

    import React from 'react';
    // import React, {Component} from 'react';
    // import ReactDOM from 'react-dom';
    import './App.css';
    const ThemeContext = React.createContext('light')
    
    class App extends React.Component{
        render() {
            return (
                <ThemeContext.Provider value="dark">
                    <Toolbar  />;
                </ThemeContext.Provider>
            )
        }
    }
    
    // 中间的组件再也不必指明往下传递 theme 了。
    function Toolbar(props){
         console.log('ThemeContext--toolbar--', props)
        // Toolbar 组件接受一个额外的“theme”属性,然后传递给 ThemedButton 组件。
        // 如果应用中每一个单独的按钮都需要知道 theme 的值,这会是件很麻烦的事,
        // 因为必须将这个值层层传递所有组件。
        return (
            <div>
                <ThemeButton  />;
            </div>
        )
    
    }
    
    class ThemeButton extends React.Component{
        // 指定 contextType 读取当前的 theme context。
      // React 会往上找到最近的 theme Provider,然后使用它的值。
      // 在这个例子中,当前的 theme 值为 “dark”。
       static contextType = ThemeContext;  // 没有赋值的话 this.context的值会是{}
        render (){
            console.log(ThemeButton.contextType, '**ThemeContext--ThemeButton**', this.context ) // 打印一下这里的值
            return <button theme={this.context}> theme 测试</button>
        }
    } 
    
    export default App;

     

     上面的代码把这行注释

    // static contextType = ThemeContext;  // 没有赋值的话 this.context的值会是{}
    class ThemeButton extends React.Component{
        // 指定 contextType 读取当前的 theme context。
      // React 会往上找到最近的 theme Provider,然后使用它的值。
      // 在这个例子中,当前的 theme 值为 “dark”。
    //    static contextType = ThemeContext;
        render (){
            console.log('**ThemeContext--ThemeButton**', this.context )
            return <button theme={this.context}> theme 测试</button>
        }
    } 

     打印

    关于static知识补充:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Classes/static

    为了代码更好管理现在把代码拆分方便管理

    目录文件

     context.js

    import React from 'react';
    // 公用提取,方便其他文件引入
    export const ThemeContext = React.createContext('light')

    App.js

    import React from 'react';
    import './App.css';
    import { ThemeContext } from './context'
    import Toolbar from './components/demo2/Toolbar';
    
    class App extends React.Component{
       render() {
            return (
                <ThemeContext.Provider value="dark">
                    <Toolbar  />;
                </ThemeContext.Provider>
            )
        }
    }
    
    export default App;
    ThemeButton.js
    /**
     * context study demo
     * context 通过中级件Toolbar.js
     */
    import React from 'react';
    import { ThemeContext } from '../../context'
    
    class ThemeButton extends React.Component{
      // 指定 contextType 读取当前的 theme context。
      // React 会往上找到最近的 theme Provider,然后使用它的值。
      // 在这个例子中,当前的 theme 值为 “dark”。
       static contextType = ThemeContext;
        render (){
            console.log('##ThemeContext--ThemeButton##', this.context )
            return <button theme={this.context}> 通过context传值theme</button>
        }
    } 
    
    export default ThemeButton
    Toolbar.js
    /**
     * context study demo
     * @param {*} props 
     * @returns 
     */
    
    import ThemeButton from './ThemeButton'
    // 中间的组件再也不必指明往下传递 theme 了。
    function Toolbar(props){
        console.log('ThemeContext--toolbar--', props)
       // Toolbar 组件接受一个额外的“theme”属性,然后传递给 ThemedButton 组件。
       // 如果应用中每一个单独的按钮都需要知道 theme 的值,这会是件很麻烦的事,
       // 因为必须将这个值层层传递所有组件。
       return (
           <div>
               <ThemeButton  />;
           </div>
       )
    
    }
    
    export default Toolbar;

     

     

  • 相关阅读:
    随机数组找丢失数据
    js打开新页面 关闭当前页 关闭父页面
    Markdown测试
    ThinkPHP中的时间自动填充 无法获取时间
    页面在谷歌浏览器和IE浏览器顶部多出空白行,火狐显示正常
    Thinkphp中验证码不显示解决办法
    106运用SWITCH语句打印星期几的单词
    声明两个变量并赋值计算出矩形的面积
    不用*用移位运算符计算21*16的数值是多少
    97.经典实例,计算球形的面积和体积
  • 原文地址:https://www.cnblogs.com/pikachuworld/p/15369652.html
Copyright © 2020-2023  润新知