最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 【React学习笔记】组件间通信&生命周期

    正文概述 掘金(明月何时赵我还)   2021-01-09   483

    组件间通信

    在 React.js 中,数据是从上自下流动(传递)的,也就是一个父组件可以把它的 state / props 通过 props 传递给它的子组件,但是子组件不能修改 props

    React.js 是单向数据流!!!

    1. 父传子:父级上直接定义,子级用props接收。
       如父级:<child data={data}></child>,在child组件中可用this.props.data访问。
    2. 子传父:在父级上定义,子级进行回调。
       如父级上定义了函数fn(a),子级通过传递参数给该函数,父级中就能进行获取。
    3. 其他组件之间:托管到共同的父亲
    4. 扩展:context->跨组件通信->provider,consumer是配对的,一般用于第三方库中
       - 创建context
         React.createContext(defaultValue);
         { Consumer, Provider } = createContext(defaultValue)
       - 发数据
          Context.Provider 在父组件调用 Provider 传递数据,Provider包裹child组件
          value 要传递的数据
         如 :<Provider
          	    value={{
                    count:count,
                    add:this.add
                  }}
            >
            <Child />
        	</Provider>
       - 接收数据
         -方法一:
           //class.contextType = Context;即将类下的contextType属性设为Context
           static contextType = Context;
           this.context;//value在this.context中
         - 方法二:
           //使用 Context.Consumer
                <Consumer>
                    {(props)=>{
                        console.log(props);
                        return <div></div>
                    }}
                </Consumer>
    

    setState

    有以下几个注意点:

    1. 浅合并(第一层) Object.assign
    2. 如果想修改深层的一个参数,用...obj
       如state={name:'xiaobai',friend:{name:'xiaohei',age:20}},只想修改friend.name,需要用
       const {friend} = this.state;
       this.setState({friend:{...friend,age:30}})
    3. 异步方法!!!
       为什么设计成异步?https://www.jianshu.com/p/cc12e9a8052c
       react通常会集齐一批需要更新的组件,然后一次性更新来保证渲染的性能
    4. update参数是 对象 或 函数
    5. React中调用setState后会触发生命周期,重新渲染组件
    6. 在react中不要直接state,而是在setState给它新值,否则在更新时获取不到更新前的state
    

    生命周期

    【React学习笔记】组件间通信&生命周期

    在getDerivedStateFromProps时是访问不到this的!!!(因为是静态方法)

    总结上图:三个阶段

    • 挂载阶段mount(初始化组件到组件构建的视图真实地渲染到DOM中)

    constructor->实例化组件,一般就初始化props和state(state现在一般放到外面)

    static getDerivedStateFromProps(props) -> 返回值是要关联进state的props

    render -> 构建虚拟DOM

    componentDidMount -> 检测组件挂载完成

    • 更新阶段update(setState组件开始更新,一直到组件完成真实的DOM更新)

    static getDerivedStateFromProps(props, state)->子组件中的props和state跟随父组件中的更新

    shouldComponentUpdate() -> 判断是否更新,nextState、nextProps 【oldState->this.state、oldProps->this.props】;返回布尔值表示是否更新

    render()

    getSnapshotBeforeUpdate(prevProps, prevState) -> 获取快照(更新了state,但DOM还未更新时)

    componentDidUpdate(prevProps,prevState,prevDOM) -> 处理副作用(请求),prevDOM时getSnapShotBeforeUpdate的返回值

    • 卸载阶段unMount(将组件从真实DOM中删除)

    componentWillUnmount->删除添加在全局的一些事件和信息

    受控组件

    受控组件和非受控组件

    当想要获取表单的一些内部状态时,就可以将表单的内部状态和组件的状态进行绑定,这样就形成受控组件 受控组件: 让 表单控件 的内部状态 和我们 state 保持一致

    非受控组件: 我们不需要同步 value 值(defaultValue,defaultChecked)

    如果在普通组件上设置value就变成了受控组件,但若没设置onChange会报错,改为使用defalutValue !

    简单例子:

    class demo extends Component{
        state = {
        	val:""
        }
        
        changeVal = ({target})=>{
        	this.setState({val:target.value});
        }
        
        render(){
        	return <input placeholder="请输入你想输入的内容" value={this.state.val} onChange={this.changeVal}/>
        }
    }
    

    起源地下载网 » 【React学习笔记】组件间通信&生命周期

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元