React非脚手架知识点总结

这篇博客详细介绍了React的基础知识,包括如何创建函数式和类式组件,组件的state和props使用,以及ref的三种形式。同时,讲解了事件处理和React收集表单数据的方法,既有非受控组件也有受控组件的实现。此外,还涉及到组件的旧版生命周期方法及其应用场景,并简单提及了高阶函数中的柯里化概念。
摘要由CSDN通过智能技术生成

目录

1、官方文档:Hello World – React

2、准备工作(js按顺序引入)

3、jsx语法规则

4、定义组件 

(1)函数式组件

(2)类式组件

5、组件的三大属性  state

6、组件的三大属性  props (只读属性)

(1)函数式组件的props(注意props限制,需要引入新的js)注意函数的验证

(2)函数式组件的props(传值过多的时候可以用下面的方法简写)

7、主键的三大属性   ref

(1)字符串形式

(2)回调函数的ref

(3)React.createRef容器

8、事件处理

9、react收集表单数据

(1)非受控组件 

(2)受控组件 

10、高阶函数_柯里化

11、组件的生命周期(旧)

(1)componentDidMount() 方法会在组件已经被渲染到 DOM 中后运行,所以,最好在这里设置计时器:

(2)我们会在 componentWillUnmount() 生命周期方法中清除计时器:

(3)强制更新 this.forceUpdate()

(4) 组将将要挂载的钩子 componentWillMount() {console.log('Count---componentWillMount');} 

(5)组件挂载完毕的钩子 componentDidMount() {console.log('Count---componentDidMount');}

(6)组件将要卸载的钩子  componentWillUnmount() {console.log('Count---componentWillUnmount');}

(7)控制组件更新的阀门  shouldComponentUpdate() {console.log("COunt---shouldComponentUpdate");return true;}

(8)组件将要更新的钩子  componentWillUpdate() {console.log('Count---componentWillUpdate');}

(9)组件更新完毕的钩子  componentDidUpdate() {console.log('Count---componentDidUpdate');}

11、组件的生命周期(新) 

12、复习

看文件夹的复习 


1、官方文档:Hello World – React

2、准备工作(js按顺序引入)

<div id="root"></div>
  <script src="../js/react.development.js"></script>
  <script src="../js/react-dom.development.js"></script>
  <script src="../js/babel.min.js"></script>
  <script type="text/babel">
    ReactDOM.render(<h1>你好</h1>, document.querySelector('#root'))
  </script>

3、jsx语法规则

类名使用  className                         样式  style = {{ color:'white' }}                       <ul>{  这个里面写js代码  }</ul>

4、定义组件 

(1)函数式组件

function Demo() {
      console.log(this); //这个指向的是undefined,因为开启了严格模式
      return (<h1>函数式组件</h1>)
    }
    ReactDOM.render(<Demo />, document.querySelector('#root'))

(2)类式组件

class Demo extends React.Component {
      render() {return (<h1>我是类式组件</h1>)}
    }
    ReactDOM.render(<Demo />, document.querySelector('#root'))

5、组件的三大属性  state

class Demo extends React.Component {
      state = { count: 1 }
      add = () => {
        const count = this.state.count + 1
        this.setState({ count })
      }
      render() {
        return (
          <button onClick={this.add}>点我加一{this.state.count}</button>
        )
      }
    }
    ReactDOM.render(<Demo />, document.querySelector("#root"))

6、组件的三大属性  props (只读属性)

(1)函数式组件的props(注意props限制,需要引入新的js)注意函数的验证

<script src="../js/prop-types.js"></script>
  <script type="text/babel">
    class Demo extends React.Component {
      render() {
        return (
          <h1>{this.props.name},{this.props.age}</h1>
        )
      }
      static propTypes = {  //指定默认标签属性值
        name: PropTypes.string.isRequired,
        age: PropTypes.number,
        fun: PropTypes.func
      }
      static defaultProps = {  //默认值
        name: 'tom',
        age: 14
      }
    }
    ReactDOM.render(<Demo name="jack" />, document.querySelector("#root"))
  </script>

(2)函数式组件的props(传值过多的时候可以用下面的方法简写)

    function Demo(props) {
      return (
        <h1>{props.name},{props.age},{props.sex}</h1>
      )
      Demo.propTypes = {
        name: PropTypes.string.isRequired, //限制为字符串,必传
        sex: PropTypes.string,    //限制为字符串
        age: PropTypes.number,    //限制为数值
        speak: PropTypes.func, //限制为函数
      }
      Demo.defaultProps = {
        sex: '男', //默认sex为男
        age: 17   // 默认age为17
      }
    }
    const person = { name: '老刘', age: 18, sex: '女' }
    ReactDOM.render(<Demo  {...person} />, document.querySelector("#root"))

7、主键的三大属性   ref

(1)字符串形式

class Demo extends React.Component {
      show = () => {
        const { input } = this.refs
        alert(input.value)
      }
      render() {
        return (
          <input ref="input" type="text" onBlur={this.show} placeholder="失去焦点提示数据" />
        )
      }
    }

(2)回调函数的ref

class Demo extends React.Component {
      show = () => {
        alert(this.input.value)
      }
      render() {
        return (
          <input ref={c => this.input = c} type="text" onBlur={this.show} placeholder="失去焦点提示数据" />
        )
      }
    }

(3)React.createRef容器

class Demo extends React.Component {
      //  React.createRef调用后可以返回一个容器,该容器可以存储被ref标识的节点,该容器是"专人专用"的
      myRef = React.createRef()
      show = () => {
        alert(this.myRef.current.value)
      }
      render() {
        return (
          <input ref={this.myRef} type="text" onBlur={this.show} placeholder="失去焦点提示数据" />
        )
      }
    }

8、事件处理

show = (e) => {console.log(e.target);}

      render() {return (<input ref={this.myRef} type="text" onBlur={this.show} placeholder="失去焦点提示数据" />)}}

9、react收集表单数据

(1)非受控组件 

class Demo extends React.Component {
      myRef = React.createRef()
      show = (e) => { console.log(e.target.value); }
      render() { return (<input ref={this.myRef} type="text" onBlur={this.show} placeholder="失去焦点提示数据" />) }
    }

(2)受控组件 

class Demo extends React.Component {
      state = { username: "" }
      save = (e) => {
        this.setState({
          username: e.target.value
        })
      }
      render() {
        return (
          <div>
            <h3>你好:{this.state.username}</h3>
            <input onChange={this.save} type="text" onBlur={this.show} placeholder="失去焦点提示数据" />
          </div>
        )
      }
    }

10、高阶函数_柯里化

高阶函数:如果一个函数符合下面2个规范中的任何一个,那么该函数就是高阶函数

              1.若A函数,接收的参数是一个函数,那么A就可以称之为高阶函数

              2.若A函数,调用的返回值依然是一个函数,那么A就可以称之为高阶函数

              常见的高阶函数有:promise setTimeout

      函数柯里化:通过函数调用继续返回函数的方式,实现多次接收参数最后统一处理的函数编码形式

        function sum(a) {

         return (b) => {

           return (c) => {

             return a + b + c

           }

          }

        }

class Demo extends React.Component { // 使用柯里化实现
      state = { username: "", password: "" }
      save = dataType => {
        return (e) => {
          this.setState({
            [dataType]: e.target.value   //这个是最妙的
          }, () => {
            console.log(this.state.username);
            console.log(this.state.password);
          })
        }
      }
      render() {
        return (
          <div>
            用户名:<input type="text" onChange={this.save("username")} />
            密  码:<input type="text" onChange={this.save("password")} />
          </div>
        )
      }
    }
      saveFormDate = (dataType, event) => {  //不使用柯里化实现
        this.setState({ [dataType]: event.target.value })
      }
 用户名: <input onChange={(event) => { this.saveFormDate('username', event) }} type="text" name="username" />
            密码: <input onChange={(event) => { this.saveFormDate('password', event) }} type="password" name="password" />

11、组件的生命周期(旧)

(1)componentDidMount() 方法会在组件已经被渲染到 DOM 中后运行,所以,最好在这里设置计时器:

(2)我们会在 componentWillUnmount() 生命周期方法中清除计时器:

(3)强制更新 this.forceUpdate()

(4) 组将将要挂载的钩子 componentWillMount() {console.log('Count---componentWillMount');} 

(5)组件挂载完毕的钩子 componentDidMount() {console.log('Count---componentDidMount');}

(6)组件将要卸载的钩子  componentWillUnmount() {console.log('Count---componentWillUnmount');}

(7)控制组件更新的阀门  shouldComponentUpdate() {console.log("COunt---shouldComponentUpdate");return true;}

(8)组件将要更新的钩子  componentWillUpdate() {console.log('Count---componentWillUpdate');}

(9)组件更新完毕的钩子  componentDidUpdate() {console.log('Count---componentDidUpdate');}

    1. 初始化阶段: 由ReactDOM.render()触发---初次渲染

         1.constructor()

         2.componentWillMount()

         3.render()

         4.componentDidMount() =====>常用

                        一般在这个钩子中做一些初始化的事,例如:开启定时器、发送网络请求、订阅消息

    2. 更新阶段: 由组件内部this.setSate()或父组件重新render触发

         1.shouldComponentUpdate()

         2.componentWillUpdate()

         3.render()   =======>必须

         4.componentDidUpdate()

    3. 卸载组件: 由ReactDOM.unmountComponentAtNode()触发

         1.componentWillUnmount() =======>常用

                        一般再这个钩子中做一些收尾的失事情,例如:关闭定时器、取消订阅消息

11、组件的生命周期(新) 

// 不做过多探讨用法极其罕见 若state的值在任何情况下都取决于props,那么就可以使用getDeriverStateFromProps
      static getDerivedStateFromProps(props, state) {
        console.log("Count---getDerivedStateFromProps", props, state);
        return null
      }
      getSnapshotBeforeUpdate() {
        return this.refs.list.scrollHeight
      }

    1. 初始化阶段: 由ReactDOM.render()触发---初次渲染

           1.constructor()

           2.getDerivedStateFromProps

           3.render()

           4.componentDidMount() =====>常用

      2. 更新阶段: 由组件内部this.setSate()或父组件重新render触发

           1.getDerivedStateFromProps

           2.shouldComponentUpdate()

           3.render() ======>必用

           4.getSnapshotBeforeUpdate

           5.componentDidUpdate()

      3. 卸载组件: 由ReactDOM.unmountComponentAtNode()触发 =====>常用

12、复习

看文件夹的复习 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值