react

作者: SecondRocker | 来源:发表于2021-11-07 17:03 被阅读0次

    react是什么

    React 是一个声明式,高效且灵活的用于构建用户界面的 JavaScript 库。使用 React 可以将一些简短、独立的代码片段组合成复杂的 UI 界面,这些代码片段被称作“组件”。

    组件定义

    class组件

    class ShoppingList extends React.Component {
      render() {
        return (
          <div className="shopping-list">
            <h1>Shopping List for {this.props.name}</h1>
            <ul>
              <li>Instagram</li>
              <li>WhatsApp</li>
              <li>Oculus</li>
            </ul>
          </div>
        );
      }
    }
    

    直接写html这部分属于jsx,它允许 HTML 与 JavaScript 的混写;现在使用babel/plugin-transform-react-jsx 编译为以下形式:

    return React.createElement('div', {className: 'shopping-list'},
      React.createElement('h1', /* ... h1 children ... */),
      React.createElement('ul', /* ... ul children ... */)
    );
    

    函数组件

    function Square(props) {
      return (
        <button className="square" onClick={props.onClick}>
          {props.value}
        </button>
      );
    }
    

    通过 Props 传递数据

    //子组件
    class Square extends React.Component {
      render() {
        return (
          <button className="square">
            {this.props.value}
          </button>
        );
      }
    }
    //父组件
    class Board extends React.Component {
      renderSquare(i) {
        return <Square value={i} />;
      }
    }
    

    事件也是通过props传递的,比如传入回调

    //子组件
    import react from "react"
    
    export default class Child extends react.Component {
      constructor(props){
        super(props)
        this.state = {
          name: props.name
        }
      }
    
      static getDerivedStateFromProps(nextProps, prevState){
        const { name } = nextProps
        if (name !== prevState.name) {
          return {name}
        }
        return null
      }
    
      render(){
        return(
          <div>
            child name: {this.state.name}&nbsp;
            <input type="button" value="修改父组件name" onClick={() => this.props.changeParentName('动次打次')}></input>
          </div>
        )
      }
    }
    
    
    // 父组件
    import Child from './Child'
    import React, { useEffect } from 'react'
    export default function Parent(props){
      const [name, setName] = React.useState(props.name);
    
      const handleChangeText = (event)=> {
        setName(event.target.value)
      }
      useEffect(() => {
        console.log('eee')
        return () => {
          console.log('bbbb')
        }
      })
      const changeParentName = (name) => {
        setName(name)
      }
      return(
        <div>
          <div>parent
            name:<input type="text" value={name} onChange={ handleChangeText }></input>
          </div>
          <div style={{'paddingLeft': '20px'}}>
            <Child name={name} changeParentName={(pName) => {changeParentName(pName)}}></Child>
          </div>
        </div>
      )
    }
    

    事件

    React 元素的事件处理和 DOM 元素类似。但是有一点语法上的不同:

    • React 事件绑定属性的命名采用驼峰式写法,而不是小写。
    • 如果采用 JSX 的语法你需要传入一个函数作为事件处理函数,而不是一个字符串(DOM 元素的写法)
    <button onClick={activateLasers}>
      激活按钮
    </button>
    

    动态加载组件

      return (
        <div>
          <div>parent
            name:<input type="text" value={name} onChange={ handleChangeText }></input>
          </div>
          <div style={{'paddingLeft': '20px'}}>
            <Child name={name} changeParentName={(pName) => {changeParentName(pName)}}></Child>
          </div>
          <div>
            <button onClick={ () => setShowCycle(!showCycle)}>{showCycle ? '隐藏' : '显示'}</button>
          </div>
          {showCycle ? <LifeCycle></LifeCycle> : ''}
      </div>
      )
    

    生命周期

    image.png

    每个组件都包含 “生命周期方法”,你可以重写这些方法,以便于在运行过程中特定的阶段执行这些方法。你可以使用此生命周期图谱作为速查表。在下述列表中,常用的生命周期方法会被加粗。其余生命周期函数的使用则相对罕见。

    挂载

    当组件实例被创建并插入 DOM 中时,其生命周期调用顺序如下:

    更新

    当组件的 props 或 state 发生变化时会触发更新。组件更新的生命周期调用顺序如下:

    卸载

    当组件从 DOM 中移除时会调用如下方法:

    会在组件卸载及销毁之前直接调用。在此方法中执行必要的清理操作,例如,清除 timer,取消网络请求或清除在 componentDidMount() 中创建的订阅等。

    错误处理

    当渲染过程,生命周期,或子组件的构造函数中抛出错误时,会调用如下方法:

    componentWillUnmount() 中不应调用 setState(),因为该组件将永远不会重新渲染。组件实例卸载后,将永远不会再挂载它。

    https://www.zhihu.com/question/301860721

    相关文章

      网友评论

          本文标题:react

          本文链接:https://www.haomeiwen.com/subject/dfsezltx.html