在React面向组件编程中,除了上一章节的组件实例的三大核心属性以外,还有很多重要的内容比如:React 的生命周期,受控组件与非受控组件,高阶函数和函数柯里化的理解等,在本文中会给大家继续讲解React 面向组件编程中剩余的内容。
表单的组件分类:
- 受控组件
- 非受控组件
多数情况下,推荐使用受控组件实现表单。在受控组件中,表单数据由组件控制。
另外一种是非受控组件,这种方式下表单组件由DOM自身控制。
props 获取其当前值,并通过回调函数(比如 onChange )通知变化React,将状态交给 React 进行处理,比如可以使用 useState 存储value 或 checked 属性相对应state 的流程class Login extends React.Component {     // 初始化状态     state = {         username:'', // 用户名         password:'', // 密码     }     // 保存用户名到状态中     saveUsername=(event)=>{         this.setState({username:event.target.value})     }     // 保存密码到状态中     savePassword=(event)=>{         this.setState({password:event.target.value})     }     // 表单提交的回调     handleSubmit=(event)=>{         event.preventDefault(); // 阻止默认事件                  let {username,password} = this.state         alert(`你输入的用户名是${username},密码是${password}`)     }     render(){         return(                                                    )     } } 非受控组件将数据存储在 DOM 中,而不是组件内,这比较类似于传统的 HTML 表单元素。
state 和 props 控制ref 从 DOM 中获取元素数据class Login extends React.Component {     handleSubmit=(event)=>{         // console.log(e>=event)         event.preventDefault(); // 阻止默认事件                  let {username,password} = this         alert(`你输入的用户名是${username.value},密码是${password.value}`)     }     render(){         return(                                                    )     } } 
React 中的组件分为受控组件和非受控组件value 属性与 React 中的状态绑定onChange 事件处理 value 的变化HTML 表单元素,数据存储在 DOM 中,而不是组件内部,获取数据的方式是通过 ref 引用React 处理,可以是任何元素,不局限于表单元素state 是变化来源),因此在改变 state 时都应该使用 setState ,而不要强制赋值Refs 不能用于函数式组件,因为函数式组件没有实例Refs 的所谓的React生命周期,就是指组件从被创建出来,到被使用,最后被销毁的这么一个过程;
 而在这个过程中,React提供了我们会自动执行的不同的钩子函数,我们称之为生命周期函数;
组件的生命周期大致分为三个阶段:组件挂载阶段,组件更新阶段,组件销毁卸载阶段
react在版本16.3前后存在两套生命周期,16.3之前为旧版,之后则是新版,虽有新旧之分,但主体上大同小异。

                      生命周期旧                                                     
                      生命周期新                                                   will 钩子,分别为 componentWillMount、componentWillReceiveProps、componentWillUpdate;getDerivedStateFromProps(从 props 中得到衍生的 state )和 getSnapshotBeforeUpdate。render:初始化渲染或更新渲染调用componentDidMount:开启监听, 发送ajax请求componentWillUnmount:做一些收尾工作, 如: 清理定时器componentWillMountcomponentWillReceivePropscomponentWillUpdate警告:
现在使用会出现警告,下一个大版本需要加上
UNSAFE_前缀才能使用,以后可能会被彻底废弃,不建议使用。
如果一个函数符合下面2个规范中的任何一个,那么它就属于一个高阶函数
常见的高阶函数:Promise,setTimeout,arr.map(数组方法)
通过函数继续调用,返回值为函数的方式,实现多次接受参数,最后统一处理的函数编码形式
function sum(a){     return (b)=>{         return (c)=>{             return a + b + c         }     } } const result = sum(1)(2)(3) console.log(result); class Login extends React.Component {     // 初始化状态     state = {         username:'', // 用户名         password:'', // 密码     }     // 保存表单数据到状态中     saveFormDate=(dataType,event)=>{ // 标识当前标签         this.setState({[dataType]:event.target.value})     }     // 表单提交的回调     handleSubmit=(event)=>{         event.preventDefault(); // 阻止默认事件                  let {username,password} = this.state         alert(`你输入的用户名是${username},密码是${password}`)     }     render(){         return(                                                    )     } } class Login extends React.Component {     // 初始化状态     state = {         username:'', // 用户名         password:'', // 密码     }     // 保存表单数据到状态中     saveFormDate=(dataType)=>{ // 标识当前标签         return (event)=>{ // 这里的回调谁执行? input标签的 onChange事件             this.setState({[dataType]:event.target.value})         }     }     // 表单提交的回调     handleSubmit=(event)=>{         event.preventDefault(); // 阻止默认事件                  let {username,password} = this.state         alert(`你输入的用户名是${username},密码是${password}`)     }     render(){         return(                                                    )     } } 欢迎大家加入我的社区,在社区中会不定时发布一些精选内容:https://bbs.csdn.net/forums/db95ba6b828b43ababd4ee5e41e8d251?category=10003
以上就是 React 面向组件编程(下),不懂得也可以在评论区里问我或私聊我询问,以后会持续发布一些新的功能,敬请关注。
我的其他文章:https://blog.csdn.net/weixin_62897746?type=blog