最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • react中的受控表单输入和非受控表单输入

    正文概述 掘金(极致同学)   2021-07-05   496

    react中的受控表单输入和非受控表单输入

    react中的受控表单输入和非受控表单输入 大家可能见过很多文章表述过,“你不应该使用 setState”,“refs 是不好的”,这很矛盾,那么选择的标准是什么呢?怎样才能做好这件事? 可以说,表单是一个web应用程序的核心,在react中表单处理也很重要。 下面就来讲述一下,这两种处理的区别和和这两种处理方式的使用场景。

    非受控

    非受控型输入就像传统的`HTML`表单输入
    
    class Form extends Component{
        render(){
            <div>
                <input type="text"/>
            </div>
        }
    }
    

    他们记住你输入的内容。之后,你可以使用 ref 获取他们的值,

    class Form extends Component {
      handleSubmitClick = () => {
        const name = this._name.value;
        // do something with `name`
      }
    
      render() {
        return (
          <div>
            <input type="text" ref={input => this._name = input} />
            <button onClick={this.handleSubmitClick}>Sign up</button>
          </div>
        );
      }
    }
    

    换句话说,你必须在需要的时候从表单中获取值。 这是执行表单输入最简单的方法。但是同样这种方式不是那么强大。

    受控

    一个受控制的输入接受它的当前值,以及一个更改该值的回调。你可以说这是一种“React way”(这并不意味着你应该一直使用它)。

    <input value={someValue} onChange={handleChange} />
    

    但是输入的值必须存在于某个state中。通常,呈现输入的组件(也就是表单组件)会保存它的state:

    class Form extends Component {
      constructor() {
        super();
        this.state = {
          name: '',
        };
      }
    
      handleNameChange = (event) => {
        this.setState({ name: event.target.value });
      };
    
      render() {
        return (
          <div>
            <input
              type="text"
              value={this.state.name}
              onChange={this.handleNameChange}
            />
          </div>
        );
      }
    }
    

    每次输入新字符时,都会调用handleNameChange。它接受输入的新值,并将其设置到 state 中。

    react中的受控表单输入和非受控表单输入 这种方式将值及时的告诉表单组件,而不需要显示获取输入值,表单组件总是能及时获取最新值,这意味着你的数据和UI是同步的,也意味着表单组件可以立刻响应输入的变化。 下面是一些常用此处理方式的场景

    • 就地反馈,比如表单验证
    • 禁用按钮,所有数据都是有效数据
    • 强制执行特定的输入格式,比如信用卡号

    当然,如果你觉得使用非受控方式会更加简单,那么就使用非受控方式吧!

    如何使元素受控

    当然,还有其他的表单元素。比如复选框,选框,文本区域。 如果你通过 a prop 设置一个表单元素的值,它就会变成“受控的”。 但是,每个表单元素都有不同的设置值的工具

    元素改变回调在回调中的新职
    <input type="text" />value="string"onChangeevent.target.value<input type="checkbox" />checked={boolean}onChangeevent.target.checked<input type="radio" />checked={boolean}onChangeevent.target.checked<textarea />value="string"onChangeevent.target.value<select />value="option value"onChangeevent.target.value

    结论

    受控表单域和非受控表单域都有优点,评估你的具体情况并选择合适的方法——适合你的就足够了。 如果你的表单在UI反馈方面非常简单,不受控制的参考是完全没问题的。你不必去听各种各样的文章说什么是“不好的”。

    场景非受控受控
    一次性值检索提交时验证即时表单验证字段有条件地禁用提交按钮强制格式化输入一条数据多个输入动态输入

    翻译自 Controlled and uncontrolled form inputs in React don't have to be complicated


    起源地下载网 » react中的受控表单输入和非受控表单输入

    常见问题FAQ

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

    发表评论

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

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

    联系作者

    请选择支付方式

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