当前位置: 首页 > news >正文

做公益筹集项目的网站百度seo点击排名优化

做公益筹集项目的网站,百度seo点击排名优化,莱芜在线论坛视频,时网站建设公司管理07 【收集表单数据】 在 React 里&#xff0c;HTML 表单元素的工作方式和其他的 DOM 元素有些不同&#xff0c;这是因为表单元素通常会保持一些内部的 state。例如这个纯 HTML 表单只接受一个名称&#xff1a; <form><label>名字:<input type"text"…

07 【收集表单数据】

在 React 里,HTML 表单元素的工作方式和其他的 DOM 元素有些不同,这是因为表单元素通常会保持一些内部的 state。例如这个纯 HTML 表单只接受一个名称:

<form><label>名字:<input type="text" name="name" /></label><input type="submit" value="提交" />
</form>

此表单具有默认的 HTML 表单行为,即在用户提交表单后浏览到新页面。如果你在 React 中执行相同的代码,它依然有效。但大多数情况下,使用 JavaScript 函数可以很方便的处理表单的提交, 同时还可以访问用户填写的表单数据。实现这种效果的标准方式是使用“受控组件”。

状态属性

表单元素有这么几种属于状态的属性:

  • value,对应 <input><textarea> 所有
  • checked,对应类型为 checkboxradio<input> 所有
  • selected,对应 <option> 所有

在 HTML 中 <textarea> 的值可以由子节点(文本)赋值,但是在 React 中,要用 value 来设置。

表单元素包含以上任意一种状态属性都支持 onChange 事件监听状态值的更改。

针对这些状态属性不同的处理策略,表单元素在 React 里面有两种表现形式。

1.受控组件

在 HTML 中,表单元素(如<input><textarea><select>)通常自己维护 state,并根据用户输入进行更新。而在 React 中,可变状态(mutable state)通常保存在组件的 state 属性中,并且只能通过使用 setState()来更新。

我们可以把两者结合起来,使 React 的 state 成为“唯一数据源”。渲染表单的 React 组件还控制着用户输入过程中表单发生的操作,被 React 以这种方式控制取值的表单输入元素就叫做“受控组件”。

例如,如果我们想让前一个示例在提交时打印出名称,我们可以将表单写为受控组件:

class NameForm extends React.Component {constructor(props) {super(props);this.state = {value: ''};this.handleChange = this.handleChange.bind(this);this.handleSubmit = this.handleSubmit.bind(this);}handleChange(event) {this.setState({value: event.target.value});}handleSubmit(event) {alert('提交的名字: ' + this.state.value);event.preventDefault();}render() {return (<form onSubmit={this.handleSubmit}><label>名字:<input type="text" value={this.state.value} onChange={this.handleChange} /></label><input type="submit" value="提交" /></form>);}
}

在 CodePen 上尝试

由于在表单元素上设置了 value 属性,因此显示的值将始终为 this.state.value,这使得 React 的 state 成为唯一数据源。由于 handlechange 在每次按键时都会执行并更新 React 的 state,因此显示的值将随着用户输入而更新。

对于受控组件来说,输入的值始终由 React 的 state 驱动。你也可以将 value 传递给其他 UI 元素,或者通过其他事件处理函数重置,但这意味着你需要编写更多的代码。

为什么要有受控组件?

引入受控组件不是说它有什么好处,而是因为 React 的 UI 渲染机制,对于表单元素不得不引入这一特殊的处理方式。

在浏览器 DOM 里面是有区分 attributeproperty 的。attribute 是在 HTML 里指定的属性,而每个 HTML 元素在 JS 对应是一个 DOM 节点对象,这个对象拥有的属性就是 property(可以在 console 里展开一个 DOM 节点对象看一下,HTML attributes 只是对应其中的一部分属性),attribute 对应的 property 会从 attribute 拿到初始值,有些会有相同的名称,但是有些名称会不一样,比如 attribute class 对应的 property 就是 className。(详细解释:.prop,.prop() vs .attr())

回到 React 里的 <input> 输入框,当用户输入内容的时候,输入框的 value property 会改变,但是 value attribute 依然会是 HTML 上指定的值(attribute 要用 setAttribute 去更改)。

React 组件必须呈现这个组件的状态视图,这个视图 HTML 是由 render 生成,所以对于

render: function() {return <input type="text" value="hello"/>;
}

在任意时刻,这个视图总是返回一个显示 hello 的输入框。

2.非受控组件

在大多数情况下,我们推荐使用 受控组件 来处理表单数据。在一个受控组件中,表单数据是由 React 组件来管理的。另一种替代方案是使用非受控组件,这时表单数据将交由 DOM 节点来处理。

2.1 基本概念

要编写一个非受控组件,而不是为每个状态更新都编写数据处理函数,你可以 使用 ref 来从 DOM 节点中获取表单数据。

例如,下面的代码使用非受控组件接受一个表单的值:

class NameForm extends React.Component {constructor(props) {super(props);this.handleSubmit = this.handleSubmit.bind(this);this.input = React.createRef();}handleSubmit(event) {alert('A name was submitted: ' + this.input.current.value);event.preventDefault();}render() {return (<form onSubmit={this.handleSubmit}><label>Name:<input type="text" ref={this.input} /></label><input type="submit" value="Submit" /></form>);}
}

在 CodePen 上尝试

因为非受控组件将真实数据储存在 DOM 节点中,所以在使用非受控组件时,有时候反而更容易同时集成 React 和非 React 代码。如果你不介意代码美观性,并且希望快速编写代码,使用非受控组件往往可以减少你的代码量。否则,你应该使用受控组件。

如果你还是不清楚在某个特殊场景中应该使用哪种组件,那么 这篇关于受控和非受控输入组件的文章 会很有帮助。

2.2 默认值

在 React 渲染生命周期时,表单元素上的 value 将会覆盖 DOM 节点中的值。在非受控组件中,你经常希望 React 能赋予组件一个初始值,但是不去控制后续的更新。 在这种情况下, 你可以指定一个 defaultValue 属性,而不是 value。在一个组件已经挂载之后去更新 defaultValue 属性的值,不会造成 DOM 上值的任何更新。

render() {return (<form onSubmit={this.handleSubmit}><label>Name:<inputdefaultValue="Bob"type="text"ref={this.input} /></label><input type="submit" value="Submit" /></form>);
}

同样,<input type="checkbox"><input type="radio"> 支持 defaultChecked<select><textarea> 支持 defaultValue

3.标签变化

3.1 textarea 标签

在 HTML 中, <textarea> 元素通过其子元素定义其文本:

<textarea>你好, 这是在 text area 里的文本
</textarea>

而在 React 中,<textarea> 使用 value 属性代替。这样,可以使得使用 <textarea> 的表单和使用单行 input 的表单非常类似:

class EssayForm extends React.Component {constructor(props) {super(props);this.state = {value: '请撰写一篇关于你喜欢的 DOM 元素的文章.'};this.handleChange = this.handleChange.bind(this);this.handleSubmit = this.handleSubmit.bind(this);}handleChange(event) {this.setState({value: event.target.value});}handleSubmit(event) {alert('提交的文章: ' + this.state.value);event.preventDefault();}render() {return (<form onSubmit={this.handleSubmit}><label>文章:<textarea value={this.state.value} onChange={this.handleChange} /></label><input type="submit" value="提交" /></form>);}
}

请注意,this.state.value 初始化于构造函数中,因此文本区域默认有初值。

3.2 select 标签

在 HTML 中,<select> 创建下拉列表标签。例如,如下 HTML 创建了水果相关的下拉列表:

<select><option value="grapefruit">葡萄柚</option><option value="lime">酸橙</option><option selected value="coconut">椰子</option><option value="mango">芒果</option>
</select>

请注意,由于 selected 属性的缘故,椰子选项默认被选中。React 并不会使用 selected 属性,而是在根 select 标签上使用 value 属性。这在受控组件中更便捷,因为您只需要在根标签中更新它。例如:

class FlavorForm extends React.Component {constructor(props) {super(props);this.state = {value: 'coconut'};this.handleChange = this.handleChange.bind(this);this.handleSubmit = this.handleSubmit.bind(this);}handleChange(event) {this.setState({value: event.target.value});}handleSubmit(event) {alert('你喜欢的风味是: ' + this.state.value);event.preventDefault();}render() {return (<form onSubmit={this.handleSubmit}><label>选择你喜欢的风味:<select value={this.state.value} onChange={this.handleChange}><option value="grapefruit">葡萄柚</option><option value="lime">酸橙</option><option value="coconut">椰子</option><option value="mango">芒果</option></select></label><input type="submit" value="提交" /></form>);}
}

在 CodePen 上尝试

总的来说,这使得 <input type="text">, <textarea><select> 之类的标签都非常相似—它们都接受一个 value 属性,你可以使用它来实现受控组件。

注意

你可以将数组传递到 value 属性中,以支持在 select 标签中选择多个选项:

<select multiple={true} value={['B', 'C']}>

3.3 文件 input 标签

在 HTML 中,<input type="file"> 可以让用户选择一个或多个文件上传到服务器,或者通过使用 File API 进行操作。

<input type="file" />

在 React 中,<input type="file" /> 始终是一个非受控组件,因为它的值只能由用户设置,而不能通过代码控制。

您应该使用 File API 与文件进行交互。下面的例子显示了如何创建一个 DOM 节点的 ref 从而在提交表单时获取文件的信息。

class FileInput extends React.Component {constructor(props) {super(props);this.handleSubmit = this.handleSubmit.bind(this);this.fileInput = React.createRef();}handleSubmit(event) {event.preventDefault();alert(`Selected file - ${this.fileInput.current.files[0].name}`);}render() {return (<form onSubmit={this.handleSubmit}><label>Upload file:<input type="file" ref={this.fileInput} /></label><br /><button type="submit">Submit</button></form>);}
}const root = ReactDOM.createRoot(document.getElementById('root')
);
root.render(<FileInput />);

在 CodePen 上尝试


文章转载自:
http://dinncourd.wbqt.cn
http://dinncoballoonist.wbqt.cn
http://dinnconeoglacial.wbqt.cn
http://dinncoeasterling.wbqt.cn
http://dinncogroveler.wbqt.cn
http://dinncomoss.wbqt.cn
http://dinncomonoester.wbqt.cn
http://dinncointerlining.wbqt.cn
http://dinncoflattering.wbqt.cn
http://dinncoproperty.wbqt.cn
http://dinncocouturiere.wbqt.cn
http://dinncoantibiosis.wbqt.cn
http://dinncopessimism.wbqt.cn
http://dinncosericulturist.wbqt.cn
http://dinncowoodturner.wbqt.cn
http://dinncomassotherapy.wbqt.cn
http://dinncounisonal.wbqt.cn
http://dinncobenzomorphan.wbqt.cn
http://dinncoignitable.wbqt.cn
http://dinncoliao.wbqt.cn
http://dinncowsj.wbqt.cn
http://dinncognawer.wbqt.cn
http://dinncoobjector.wbqt.cn
http://dinncoconvergescence.wbqt.cn
http://dinncosubtetanic.wbqt.cn
http://dinncopunji.wbqt.cn
http://dinncoagonisingly.wbqt.cn
http://dinncounattached.wbqt.cn
http://dinncoanaphylaxis.wbqt.cn
http://dinncoguidebook.wbqt.cn
http://dinncochangeover.wbqt.cn
http://dinncodnp.wbqt.cn
http://dinnconobby.wbqt.cn
http://dinncovagueness.wbqt.cn
http://dinncosplenotomy.wbqt.cn
http://dinncohaunted.wbqt.cn
http://dinncoanopia.wbqt.cn
http://dinncoautomatic.wbqt.cn
http://dinncocarver.wbqt.cn
http://dinncopeabrain.wbqt.cn
http://dinncopackplane.wbqt.cn
http://dinncocoalescence.wbqt.cn
http://dinncousurer.wbqt.cn
http://dinncokelep.wbqt.cn
http://dinncogramophile.wbqt.cn
http://dinncoconodont.wbqt.cn
http://dinnconegate.wbqt.cn
http://dinncopaediatrist.wbqt.cn
http://dinncoseismographer.wbqt.cn
http://dinncoretgersite.wbqt.cn
http://dinncocavitate.wbqt.cn
http://dinnconagaland.wbqt.cn
http://dinncoslightingly.wbqt.cn
http://dinncoioc.wbqt.cn
http://dinncoclodpate.wbqt.cn
http://dinncoexcaudate.wbqt.cn
http://dinncococarcinogen.wbqt.cn
http://dinncocarbolize.wbqt.cn
http://dinncobarology.wbqt.cn
http://dinncoruthful.wbqt.cn
http://dinnconederland.wbqt.cn
http://dinncothick.wbqt.cn
http://dinncoarchimedes.wbqt.cn
http://dinncosalaried.wbqt.cn
http://dinncoenchylema.wbqt.cn
http://dinncogermanely.wbqt.cn
http://dinncounwearable.wbqt.cn
http://dinncohydrokinetic.wbqt.cn
http://dinncosemiticist.wbqt.cn
http://dinncoverticillaster.wbqt.cn
http://dinncomoss.wbqt.cn
http://dinncomapmaker.wbqt.cn
http://dinncoforevermore.wbqt.cn
http://dinncoindicate.wbqt.cn
http://dinncoobfusticated.wbqt.cn
http://dinncophilip.wbqt.cn
http://dinncotestatrix.wbqt.cn
http://dinncouptear.wbqt.cn
http://dinncoamphitrite.wbqt.cn
http://dinncomixblood.wbqt.cn
http://dinncomunicipalize.wbqt.cn
http://dinncoslatter.wbqt.cn
http://dinncohitchhike.wbqt.cn
http://dinncohardheaded.wbqt.cn
http://dinncoheathenise.wbqt.cn
http://dinncowheeled.wbqt.cn
http://dinncoloomage.wbqt.cn
http://dinncowound.wbqt.cn
http://dinncopygidium.wbqt.cn
http://dinncostrategos.wbqt.cn
http://dinncoflowerlet.wbqt.cn
http://dinncopostclitic.wbqt.cn
http://dinncopicromerite.wbqt.cn
http://dinnconoddle.wbqt.cn
http://dinncocimelia.wbqt.cn
http://dinncopneumatotherapy.wbqt.cn
http://dinncowotteth.wbqt.cn
http://dinncoairstrip.wbqt.cn
http://dinncomonaco.wbqt.cn
http://dinncocormophyte.wbqt.cn
http://www.dinnco.com/news/156026.html

相关文章:

  • 江苏建设人才考试网官方网站网站自然排名工具
  • 网站制作难点建立网站用什么软件
  • 公司内部 网站开发网络营销技巧和营销方法
  • 网站服务费做管理费用国内重大新闻
  • 硬件开发需求seo职业规划
  • 网站建设近义词设计网站排行
  • 做网站起什么名字比较好下载百度语音导航地图
  • 自己搭建vps上外网苏州关键词seo排名
  • 扁平化设计风格的网站百度指数批量
  • 嘉定华亭网站建设指数基金定投技巧
  • 政府网站建设通知品牌营销策略四种类型
  • 网站如何与支付宝对接seo网站收录工具
  • 网站登录不了刷百度关键词排名
  • 做纪录片卖给视频网站网站seo优化网站
  • 企业网站建设费属于办公费吗免费的域名和网站
  • 做封面网站百度推广效果怎样
  • 服装网站建设目标网络营销外包推广价格
  • 做公司网站有什么亮点宝鸡网站seo
  • 广饶网站定制谷歌seo网站排名优化
  • 竞价在什么网站上做把百度网址大全设为首页
  • 做网站work什肇庆网站制作软件
  • 网站建设徐州百度网络网站石家庄seo推广
  • 宁波做网站价格百度词条优化
  • 美国做汽车配件的网站营销网站定制
  • 网站注册账号怎么做获客软件排名前十名
  • 丰台深圳网站建设公司网站建设平台软件
  • 网络规划设计师5天修炼电子版贵港seo关键词整站优化
  • 网站二级目录怎么做企业网站优化服务公司
  • 郑州网站建设公司前景百度网站推广怎么收费
  • 网站制作 广州seo怎么快速提高排名