受控组件:
受控组件是必须要有value的,value用来传入一个参数,结合onchang来控制这个参数输出。每当value变化的时候,都会调用onchange的方法,事件处理器拿到新的值之后就会重新渲染视图,更新表单。
其中,文本框、下拉框都用的是event.target.value,而多选框用的是event.target.checked。
注意:value和onchange两者在受控组件中缺一不可,一旦缺少其中一个就会报错。
非受控组件:
非受控组件即不受状态的控制,获取数据就是相当于操作DOM。一般没有value,我们就可以认为这个组件是非受控组件,但是我们可以通过defaultValue来给初始值。onBlur是失去焦点,一旦输入框失去焦点就会触发响应的方法。
结论
受控和非受控元素都有其优点,根据具体情况选择。