美文网首页
ReactJS_14 表单的可控组件和不可控组件

ReactJS_14 表单的可控组件和不可控组件

作者: 习惯芥末味 | 来源:发表于2018-10-05 18:34 被阅读0次

可控组件和不可控组件:

在React中的input标签是有些小坑的,input本身就有自己的缓存机制,然后React的State也有缓存机制。这两种缓存机制我们在编码中是要进行取舍的。将input中的value绑定到state的React组件就是可控组件,反之则是不可控组件。

可控组件:

render()函数中设置了value的值是一个功能受限的组件,渲染出来的HTML元素始终保持value属性的值,即使用户输入也不会改变。

class MyForm extends React.Component{
        render(){
            return(
                <div>
                    <input type="text" value="React教程"}/>
                </div>
            )
        }
    }

这时候你在浏览器中打开的React教程这个值是不可变的,甚至连删除都删除不了,这是由React的渲染策略决定的。如果要写成功能正常和可用性组件,我们需要编写onChange事件,并将value绑定到state中。

 class MyForm extends React.Component{
        constructor(props){
            super(props);
            this.state={value:'React教程'}
        };
        handleChange(event){
            this.setState({
                value:event.target.value
            });
            console.log(this.state.value);
        }
        render(){
            return(
                <div>
                    <input type="text" value={this.state.value} onChange={this.handleChange.bind(this)}/>
                </div>
            )
        }
    }
    ReactDOM.render(
        <MyForm />,
        document.getElementById('root')
    );

在情况允许的条件下,我们应该优先考虑编写可控组件。

可控组件的有点:

  • 符合React单向数据流特性,即从state流向render输出的结果。
  • 数据存储在state中,便于访问和处理。

不可控组件

在input标签中不把value绑定到state上的就是不可控组件,它的数据不与state对应,所以在开发时会给自己挖很多坑,但是不可控组件并不是不可掌控,下面我们了解一下不可控组件的小技巧。
我们先来做一个最简单的不可用组件。

class MyForm extends React.Component{
        render(){
            return(
                <div>
                    <input type="text"/>
                </div>
            )
        }
    }

组件完成之后给它加上一个onChange事件,发现是可以监控到变化值的。如果要获得iput中的value值,需先拿到其DOM节点,然后获取其value值。

  class MyForm extends React.Component{
        handleChange(){
            const inputValue=ReactDOM.findDOMNode(this.refs.React).value;
            console.log(inputValue);
        }

        render(){
            return(
                <div>
                    <input type="text" onChange={this.handleChange.bind(this)} ref="React"/>
                </div>
            )
        }
    };

上面的方法太过于繁琐,而且不可复用,所以我们还是采取给input加入默认值的方式,但是不是value了,而是defaultValue

class MyForm extends React.Component{
        render(){
            return(
                <div>
                    <input type="text" defaultValue="默认值"/>
                </div>
            )
        }
    }

相关文章

  • ReactJS_14 表单的可控组件和不可控组件

    可控组件和不可控组件: 在React中的input标签是有些小坑的,input本身就有自己的缓存机制,然后Reac...

  • 表单与可控组件不可控组件

    在react中,不能像在Vue中那样双向数据绑定,来动态的响应数据的变化,所以在操作表单的时候需要我们手动操作。 ...

  • 可控组件与不可控组件

    核心区别:值与state是否对应。 可控组件的好处: 复合React数据流 数据在state中,修改跟使用更加方便...

  • 受控组件

    受控组件 受控组件:组件的状态是可控制的 非受控组件:组件的状态是不可控制的 小练习:实现输入框输入,同步显示在下...

  • React 可控不可控组件

    拿到组件的节点 通过ref属性,然后调用React.findDOMNode("ref_name"); 可控组件如果...

  • React 进阶之路 五 ( 父组件 与 子组件相互传值 )

    # 目标 如上图: 点击 父组件 的 显示/隐藏子组件 按钮可控制子组件的显示 点击 子组件 的 给父组件传值 ...

  • useReducer 实现todoList ts规范书写

    优化 展示列表和输入组件应该没有自己的逻辑,应该完全可控,方法都是父组件传入 typing/index.ts ac...

  • React 的几个注意点

    受控组件和无状态组件 非受控组件推荐使用受控组件来实现表单. 在受控组件中, 表单数据是有React组件处理如果让...

  • Google APP架构指北

    问题由于App随时可能被销毁,而且四大组件是短暂且生命周期不可控,在重建时App数据和状态不能依赖四大组件。 架构...

  • 可控和不可控

    因为安全感的缺失,一般,大家都喜欢可控的东西。 比如找工作,会担心: 能不能融入团队?会不会有办公室政治?不知道...

网友评论

      本文标题:ReactJS_14 表单的可控组件和不可控组件

      本文链接:https://www.haomeiwen.com/subject/xoeqaftx.html