React表单-创新互联

表单组件两种类型:约束组件和无约束组件

公司主营业务:网站设计制作、网站设计、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出黔江免费做网站回馈大家。

  1. 无约束组件:

     eg:

var MyForm = React.createClass({

   render: function() {

      return ;

   }

});

      组件的value并非由父组件设置,而是让自己控制自己的值。

     一个无约束的组件没有太大用处,除非可以访问它的值。可以通过给添加一个ref属性以访问到DOM节点的值。ref是一个不属于DOM属性的特殊属性。可以通过this上下文访问这个节点,所有的ref都添加到了this.refs上。

     eg:调用value:

var MyForm = React.createClass({

   submitHandler: function(event) {

      event.preventDefault();

      //通过ref访问输入框

      var helloTo = this.refs.helloTo.getDOMNode().value;

      alert(helloTo);

   }

   render: function() {

      return (

         

            

            

            

         

      );

   }

});

   2. 约束组件:

     约束组件的模式与React其他类型组件的模式一致。表单的状态交由React组件控制。状态值被存储在React组件的state中。

     约束组件能更好的控制表单组件。在约束组件中,输入框的值是由父组件社设置的。

     eg:

var MyForm = React.createClass({

   getInitialState: function() {

      return {

         helloTo: "Hello World!"

      };

   }

   handleChange: function(event) {

      this.setState({

         helloTo: event.target.value

      });

   }

   submitHandler: function(event) {

      event.preventDefault();

      //通过ref访问输入框

      alert(this.state.helloTo);

   }

   render: function() {

      return (

         

            

            

            

         

      );

   }

});

     约束组件可以控制数据流,在用户输入数据时更新state。如将用户输入的字符转成变大写(如:this.setState({helloTo: event.target.value.toUpperCase()});)并添加到输入框时不会发生闪烁。这是因为React拦截了浏览器原生的change事件,在setState被调用后,这个组件就会重新渲染输入框。然后React计算差异,更新输入框的值。

   3. 表单事件:

     React支持所有HTML事件。这些事件遵循驼峰命名的约定,且会被转成合成事件。这些事件是标准化的,提供了跨浏览器的一致接口。

     所有合成事件都提供了event.target来访问触发事件的DOM节点。

     访问约束组件最简单的方式之一:

handleEvent: function(syntheticEvent) {

   var DOMNode = syntheticEvent.target;

   var newValue = DOMNode.value;

}

   4. Label:

     Label是表单元素中重要组件,可以明确地向用户传达你的要求,提升单选框和复选框的可用性。

     React中class变成className,for变为htmlFor:

  5. 文本框和Select:

     React中的