React操作表单

最近的项目中开发中都是用react,其中有用到react去操纵表单。然后自己就在每个表单元素中添加 ref,  然后再像jquery操作dom一样去操纵这个ref,

代码如下:

首先我在每个表单元素那里都加了ref

然后再像操作dom一样操作表单

整个过程看起来即累赘,又感觉很怪。这样你还不如直接用jqurey来操作dom.

  在这里,想补充一下 react 中的ref到底为何物

ref 属性可以是一个回调函数,而不是一个名字。这个回调函数在组件安装后立即执行。被引用的组件作为一个参数传递,且回调函数可以立即使用这个组件,或保存供以后使用(或实现这两种行为)。

它与把 ref 属性分配给从 render 返回来的东西一样简单.

完成的示例

var App = React.createClass({
    getInitialState: function() {
      return {userInput: ‘‘};
    },
    handleChange: function(e) {
      this.setState({userInput: e.target.value});
    },
    clearAndFocusInput: function() {
      // Clear the input
      this.setState({userInput: ‘‘}, function() {
        // This code executes after the component is re-rendered
        React.findDOMNode(this.refs.theInput).focus();   // Boom! Focused!
      });
    },
    render: function() {
      return (
        <div>
          <div onClick={this.clearAndFocusInput}>
            Click to Focus and Reset
          </div>
          <input
            ref="theInput"
            value={this.state.userInput}
            onChange={this.handleChange}
          />
        </div>
      );
    }
  });

在这个例子中,render 函数返回 <input/ > 实例的描述。但真正的实例是通过 this.refs.theInput 访问的。只要带有 ref =“theInput” 的子组件从 render 返回,this.refs.theInput 就会访问适当的实例。这甚至能在更高的级别(non-DOM)组件中实现,如 <Typeahead ref = " myTypeahead " / >

总结

向一个特定的子实例发送消息,Refs 是一个很好的方式,而通过流动式接收 Reactive 的 props 和 state 的方式可能是不方便的。然而,对于你的应用程序中的流动数据来说,refs 应该不是你的首选抽象特性。默认情况下,为用例使用 Reactive 数据流并保存 refs 本来就是无功无过的。

好处:

  • 你可以在组件类中定义任何公共方法(如在 Typeahead 中的复位方法),并通过 refs(如this.refs.myTypeahead.reset())调用这些公共方法。
  • 执行 DOM 测量几乎总是需要接触“本地”组件,如 <input/ >,并通过 React.findDOMNode(this.refs.myInput)访问它的底层 DOM 节点。Refs 是可行的可靠的方法之一。
  • refs 自动为你 book-kept!如果子组件被摧毁,那么它的 ref 也被摧毁了。在这里不必担心内存(除非你为保留自己的 reference 做了一些疯狂的事)。

注意事项:

  • 永远不要访问组件的 render 方法内部的 refs——或任何组件的 render 方法正在 call satck 中运行时,也不要访问 refs。
  • 如果你想保存 Google Closure Compiler Crushing 的弹性,确保永远不要访问作为字符串被指定的属性。这意味着如果你的 ref 被定义为 ref =“myRefString”,你必须使用 this.refs[‘myRefString‘] 来访问。
  • 如果你还没有用 React 给几个应用程序编程,那么你通常首先会倾向于尝试使用 refs 来“让事情发生”在你的应用程序中。如果是这样的话,花点时间,更为慎重的思考一下 state 应该属于组件层次结构的什么位置。通常情况下,你会清楚地发现,“拥有”那个 state 的适当的位置是更高的层次结构中。把 state 放置在那里通常可以消除任何想要使用 ref 来“让事情发生”的现象——相反,数据流通常会实现你的目标。

上面的介绍参考:http://wiki.jikexueyuan.com/project/react/more-about-refs.html

  看的不是很懂。不过总结出,如果我像我上面那样去操作一大丢的表单的话,会影响数据流的执行

所以我将我的代码改为如下:

首先,在初始状态,设置表单的值

然后,将表单的ref值去掉,而是动态的来给它赋值

再之后, 给每个表单添加这些时间,让它输入框每次变化的时候,都更新表单value对应的state。下面是每个表单对应的事件

最后,将这些事件添加到表单的onChange中

通过这样的修改,每次我的输入框发生变化时,表单value对应的state就会更新,从而达到操纵表单的效果。

结合着ajax的话,我们只需要获取每个表单的当前的state就行。比如,我要获取price这个元素的值,我只需要var priceValue=this.state.price既可。

而不需要去操作一系列的dom。因为是处于演示,所以每个表单的函数我就没有去封装了。共用一套看起来会好看点

如果有更好的办法,望多多指教!

时间: 2024-10-13 21:51:09

React操作表单的相关文章

webpack+react+antd 单页面应用实例

webpack+react+antd 单页面应用实例 React框架已经火了好长一段时间了,再不学就out了! 对React还没有了解的同学可以看看我之前的一篇文章,可以快速简单的认识一下React.React入门最好的实例-TodoList 自己从开始接触react一窍不通,到慢慢的似懂非懂,通过各种途径学习也有一阵了.学习过程中还会接触到很多新的东西,比如ES6.webpack,过程艰辛谁人懂,见坑填坑慢慢来.今天把学习过程过滤了一下,只说项目实际需要用的东西,总结了一套能看到的东西,分享给

JQuery:各种操作表单元素方法小结

来源:http://www.ido321.com/1220.html 表单元素无处不在.已然成了Web应用不可或缺的一个部分. 对表单最最最常见的操作就是获取表单元素的值或者更改表单元素的值.那在JQuery和JavaScript中怎么操作表单元素的值? JQuery操作表单总结: 1.文本框.password框.隐藏域.文本域(id换成相应的,value属性存在,才干利用attr('value') 获取值,否则返回undefined): 1.1 获取->$("#text").v

React构建单页应用方法与实例

React作为目前最流行的前端框架之一,其受欢迎程度不容小觑,从这门框架上我们可以学到许多其他前端框架所缺失的东西,也是其创新性所在的地方,比如虚拟DOM.JSX等.那么接下来我们就来学习一下这门框架是如何构建起一个单页应用的. 前言 首先在学习这门框架前,你需要对以下知识有所了解: 原生JS基础 CSS基础 npm包管理基础 webpack构建项目基础 ES6规范 以上五个知识点也是目前学习其他前端框架所必须了解的前置任务.JS和CSS就不多说了,npm是目前最提倡也是占据主导地位的包管理工具

廖雪峰js教程学习——操作表单

# 廖雪峰js教程学习记录——操作表单 # 用JavaScript操作表单和操作DOM是类似的,因为表单本身也是DOM树. 用JavaScript来操作表单,可以获得用户输入的内容,或者对一个输入框设置新的内容. HTML表单的输入控件主要有以下几种: - 文本框,对应的`<input type="text">`,用于输入文本: - 口令框,对应的`<input type="password">`,用于输入口令: - 单选框,对应的`<

警告视图及操作表单在xcode7.0中的使用

警告视图(alert)及操作表单(action sheet)都用于向用户提供反馈.(模态视图) 操作表单:要求用户在两个以上选项之间做出选择.操作表单从屏幕底部出现,显示一系列按钮供用户选择.用户必须点击其中一个按钮之后才能继续使用应用程序.操作表单通常用于向用户确认有潜在危险的或者无法撤销的操作,比如删除对象. 警告视图:以圆角矩形的形式出现在屏幕中央.与操作表单类似,警告视图也要求用户必须作出一个回应,然后才能继续使用应用程序.警告视图通常用于通知用户发生了一些重要的或者不寻常的事情.与操作

JQuery操作表单相关使用总结

select下拉列表onChange事件之JQuery实现: Java代码   JQuery: $(document).ready(function () { $("#selectMenu").bind("change", function () { if ($(this).val() == "pro1") { $("#pro1").slideDown(); $("#pro2").slideUp(); }

操作表单

用JavaScript操作表单和操作DOM是类似的,因为表单本身也是DOM树. 不过表单的输入框.下拉框等可以接收用户输入,所以用JavaScript来操作表单,可以获得用户输入的内容,或者对一个输入框设置新的内容. HTML表单的输入控件主要有以下几种: 文本框,对应的<input type="text">,用于输入文本: 口令框,对应的<input type="password">,用于输入口令: 单选框,对应的<input typ

javascript_操作表单_原生

<!-- javascript_操作表单_原生 --> <!--代码1:--> <label><input type="radio" name="weekday" id="monday" value="1"> Monday</label> <label><input type="radio" name="weekday&

前端 ----jQuery操作表单

表单控件是我们的重中之重,因为一旦牵扯到数据交互,离不开form表单的使用,比如用户的注册登录功能等 那么通过上节知识点我们了解到,我们在使用jquery方法操作表单控件的方法: $(selector).val()//设置值和获取值 看如下HTML结构: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></ti