react开始梳理,不会从最基本的创建一个react项目开始,只是梳理一些概念,今天简单梳理一个较为简单的概念,就是受控组件与非受控组件
组件
,受控与非受控是从组件的角度出发来说出的概念,字面意思就是组件时不被控制的,不被谁控制,当然是不被父组件控制,那么不受控制的组件有什么特性,就是一切逻辑只与自身有关,与其他的组件没有通信与交集
import React, { Component } from 'react'; import ReactDOM from 'react-dom'; class Demo1 extends Component { render() { return ( <input /> //<ABC /> ) } } ReactDOM.render(<Demo1/>, document.getElementById('content'))
我们这样的代码会发现一个问题,就是input组件我们这样使用的话,将无法与内部有任何交集,那么这个不带参数的input组件就是一定意义上的非受控组件,input等同与任何不传递参数的组件
非受控组件也就是一个独立组件,不需要传值也无任何与当前组件的父组件有所交集,在我们封装组件的时候,只有在当前组件只做展示用途且无任何不同的时候才会封装为非受控组件
import React,{Component} from 'react'; import ReactDOM from 'react-dom'; class Input extends Component{ constructor(){ super(); this.state = {val:''}; } handleChange=(event)=>{ let val = event.target.value; this.setState({val}) } render(){ return ( <div> <p>{this.state.val}</p> //<input type="text" value='123' /> <input type="text" value={this.state.val} onChange={this.handleChange} /> //input就是受控组件 被状态对象的属性控制 </div> ) } } ReactDOM.render(<Input/>,window.app)
我们不要把input看作input组件,我们要把input看作任何一个我们引用或者自己封装的组件
当这个组件被我们传值之后,哪怕是被我们传的固定的字符串,本质上来讲依旧是受控组件,受控组件不是看有没有数据双向绑定,而是看本质上有没有受控,当我们传递一个固定值的时候,input组件的值就固定了,无法修改,虽然我们传递了props时写死的值,但是这个值依旧是把input组件进行了控制
数据驱动视图,视图驱动数据
嘛
总结
:受控组件与非受控组件就是一个概念,表明当前的组件是否受控,是否是一个单独的与其他内容都无任何交互的组件,简单来说,完全独立的一个组件,就可以看作一个非受控组件,其他的都时受控组件