• React进阶笔记


    1. 事件监听

    React中使用onClick类似的写法来监听事件,注意this绑定问题 react里严格遵循单项数据流,没有数据双向绑定,
    所以输入框要设置value和onChange 
    handleChange(e){ this.setState({ name:e.target.value }) }
    <input type="text" value={this.state.name} onChange={(e)=>this.handleChange(e)} />

    2.  PureComponent Vs Component  https://www.jianshu.com/p/c41bbbc20e65

    3.  React.memo

    React v16.6.0 之后的版本,可以使用 React.memo 让函数式的组件也有PureComponent的功能 
    4. HOC(Higher-Order Components) 高阶组件
    高阶组件也是一个组件,但是他返回另外一个组件,产生新的组件可以对属性进行包装,甚至重写部分生命周期 
    const withKaikeba = (Component) => { const NewComponent = (props) => { return <Component {...props} name="开课吧高阶组件" />; };return NewComponent; };
    上面withKaikeba组件,其实就是代理了Component,只是多传递了一个name参数 
    5. 高阶组件最巧妙的一点,是可以链式调用。
    import React, {Component} from 'react'
    import {Button} from 'antd'
    const withKaikeba = (Component) => {
        const NewComponent = (props) => {
            return <Component { ...props } name = "开课吧高阶组件" / > ;
        };
        return NewComponent;
    };
    const withLog = Component => {
        class NewComponent extends React.Component {
            render() {
                return <Component { ...this.props }  />;
            }
            componentDidMount() {
                console.log('didMount', this.props)
            }
        } return NewComponent
    }
    class App extends Component {
        render() {
            return (
                <div className="App">
                    <h2>hi,{this.props.name}</h2 >
                    < Button type="primary" > Button < /Button>
                    </div >
                 )
       }
       }
    export default withKaikeba(withLog(App))
    6. 高阶组件装饰器写法
    npm install --save-dev babel-plugin-transform-decorators-legacy
    const { injectBabelPlugin } = require("react-app-rewired");
    module.exports = function override(config) {
      config = injectBabelPlugin(
        [
          "import",
          {
            libraryName: "antd",
            libraryDirectory: "es",
            style: "css"
          }
        ],
        config
      );
      config = injectBabelPlugin(
        [
          "@babel/plugin-proposal-decorators",
          {
            legacy: true
          }
        ],
        config
      );
      return config;
    };

    使用装饰器

    import React, { Component } from 'react'
    import { Button } from 'antd'
    const withKaikeba = (Component) => {
        const NewComponent = (props) => {
            return <Component { ...props } name="开课吧高阶组件" />;
        };
        return NewComponent;
    };
    const withLog = Component => {
        class NewComponent extends React.Component {
            render() {
                return <Component {  ...this.props } />;
            }
            componentDidMount() {
                console.log(Component.name, 'didMount', this.props)
            }
        } return NewComponent
    }
    @withKaikeba
    @withLog
    class App extends Component { render() { return ( <div className="App"> <h2>hi,{this.props.name}</h2 > < Button type="primary" > Button < /Button> </div > ) } } export default App

    7.  按需加载

    1.安装react-app-rewired取代react-scripts,可以扩展webpack的配置 ,类似vue.confifig.js
    npm install react-app-rewired@2.0.2-next.0 babel-plugin-import --save

    2.根目录创建config-overrides.js 文件

    const {injectBabelPlugin} = require('react-app-rewired');
    
    module.exports = function override(config, env) {
    
        config = injectBabelPlugin(
            ['import', {libraryName: 'antd', libraryDirectory: 'es', style: 'css'}],
            config
        );
    
        config = injectBabelPlugin([
            "@babel/plugin-proposal-decorators",
            {
                "legacy": true
            }
        ], config);
    
        return config;
    
    };

    3.把package.json的react-script 替换为 react-app-rewired

      "scripts": {
        "start": "react-app-rewired start",
        "build": "react-app-rewired build && mkdir ./build/views/ && mv ./build/index.html ./build/views/",
        "test": "react-app-rewired test --env=jsdom"
      }

     8. 

     

  • 相关阅读:
    7. 整数反转
    14. 最长公共前缀
    13. 罗马数字转整数
    从web解析到网络空间
    python实例:霍兰德人格分析雷达图
    从数据处理到人工智能
    Python第三方库的安装
    Python之os库的使用
    Python第三方库的安装
    Python程序设计思维
  • 原文地址:https://www.cnblogs.com/it-Ren/p/12219913.html
Copyright © 2020-2023  润新知