PREACT学习笔记

Posted 前端加油鸭

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PREACT学习笔记相关的知识,希望对你有一定的参考价值。

Forms

Preact表单的工作原理与html中的表单基本相同。您渲染一个控件,并将使用事件侦听它。

主要区别在于,在大多数情况下,该值不是由DOM节点控制,而是由Preact控制。

受控和非受控组件

在谈论表单控件时,您经常会遇到“受控组件”和“不受控制的组件”两个词。该描述是指处理数据流的方式。DOM具有双向数据流,因为每个表单控件都自行管理用户输入。用户输入时,简单的文本输入都始终更新其值。

相反,像Preact这样的框架通常具有单向数据流。组件并不管理值本身,而是管理组件树中更高的部分。

// Uncontrolled, because Preact doesn't set the value<input onInput={myEventHandler} />;
// Controlled, because Preact manages the input's value now<input value={someValue} onInput={myEventHandler} />;

通常,您应始终使用受控组件。但是,在构建独立的组件或包装第三方UI库时,仅将组件用作非preact功能的安装点使用。在这些情况下,“不受控制”的组件更加适合。

这里要注意的是,将值设置为undefined或null实际上将变得不受控制。

创建一个简单的表格

让我们创建一个简单的表单来提交待办事项。我们创建一个<form> 元素并绑定一个在提交表单时被调用的事件。我们对文本输入字段执行类似的操作,但请注意将值存储在类中。您猜对了,我们在这里使用受控输入。在此示例中,它非常有用,因为我们需要在另一个元素中显示输入的值。

class TodoForm extends Component { state = { value: '' };
onSubmit = e => { alert("Submitted a todo"); e.preventDefault(); }
onInput = e => { const { value } = e.target; this.setState({ value }) }
render(_, { value }) { return ( <form onSubmit={this.onSubmit}> <input type="text" value={value} onInput={this.onInput} /> <p>You typed this value: {value}</p> <button type="submit">Submit</button> </form> ); }}

选择输入框

<select> 元素涉及更多,但与所有其他表单控件类似:

class MySelect extends Component { state = { value: '' };
onChange = e => { this.setState({ value: e.target.value }); }
onSubmit = e => { alert("Submitted " + this.state.value); e.preventDefault(); }
render(_, { value }) { return ( <form onSubmit={this.onSubmit}> <select value={value} onChange={this.onChange}> <option value="A">A</option> <option value="B">B</option> <option value="C">C</option> </select> <button type="submit">Submit</button> </form> ); }}

复选框和单选按钮

构建受控表单时,复选框和单选按钮(<input type =“ checkbox | radio”>)初始化时可能引起混乱。这是因为在不受控的环境中,我们通常会允许浏览器为我们“切换”或“选中”复选框或单选按钮,监听change事件并对新值做出反应。但是,此改变无法反映到ui层,UI始终会根据state和props更改自动更新。

遍历:假设我们在复选框上侦听“更改”事件,该事件在用户选中或取消选中该复选框时触发。在更改事件处理程序中,我们将state值设置为从复选框接收到的新值。这样做将触发组件的重新渲染,这将把复选框的值重新分配给state的值。这是不必要的,因为我们只是向DOM询问了一个值,然后告诉它再次我们想要的时进行渲染。

因此,与其监听一个输入事件,不如监听一个点击事件,该事件在用户单击复选框或关联的<label>时触发。复选框只是在布尔值true和false之间切换,因此单击复选框或标签,我们将反转状态下的任何值,触发重新渲染,将复选框的显示值设置为所需的值。

class MyForm extends Component { toggle = e => { let checked = !this.state.checked; this.setState({ checked }); };
render(_, { checked }) { return ( <label> <input type="checkbox" checked={checked} onClick={this.toggle} /> </label> ); }}








以上是关于PREACT学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

preact 源码学习:JSX解析与DOM渲染

学习笔记:python3,代码片段(2017)

从Preact中了解React组件和hooks基本原理

[原创]java WEB学习笔记61:Struts2学习之路--通用标签 property,uri,param,set,push,if-else,itertor,sort,date,a标签等(代码片段

preact 源码学习系列之二:组件的渲染与更新

Preact:一个备胎的自我修养