ton*_*nix 5 javascript reactjs
在 React 的主页上,有最后一个示例(使用外部插件的组件),带有textarea:
<textarea
id="markdown-content"
onChange={this.handleChange}
defaultValue={this.state.value}
/>
Run Code Online (Sandbox Code Playgroud)
当我输入时,textarea会更新。
现在,我试图改变defaultValue有value:
<textarea
id="markdown-content"
onChange={this.handleChange}
value={this.state.value}
/>
Run Code Online (Sandbox Code Playgroud)
结果是相同的(与 一样defaultValue,即当我输入时,textarea更新后的文本会在视觉上得到更新)。
那么,两者之间的真正区别是什么?
我认为一个很好的例子是如果您使用硬编码字符串
function App(){
return(
<textarea
defaultValue="foo" // only by default foo
/>
);
}
ReactDOM.render(<App/>, document.getElementById("root"));Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.3/umd/react-dom.production.min.js"></script>
<div id="root"></div>Run Code Online (Sandbox Code Playgroud)
function App(){
return(
<textarea
value="foo" // will forever be foo
/>
);
}
ReactDOM.render(<App/>, document.getElementById("root"));Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.3/umd/react-dom.production.min.js"></script>
<div id="root"></div>Run Code Online (Sandbox Code Playgroud)
因此,虽然本段下面的代码片段可能看起来与使用 prop 相同,value因为onChange可能会更新状态值(因此看起来像是正在更新defaultValueprop),但事实并非如此。它仍然是一个不受控制的组件,将直接根据用户输入更新其值。this.state.value它只是使用最初渲染时的默认值进行初始化。
<textarea
id="markdown-content"
onChange={this.handleChange}
defaultValue={this.state.value}
/>
Run Code Online (Sandbox Code Playgroud)
只要您更改其中使用的值,value就不会有任何差异。如果您不更新变量并设置了文本区域值,则无法通过键入来更改文本区域的值。通过使用defaultValue,您不必更新任何变量。
| 归档时间: |
|
| 查看次数: |
1471 次 |
| 最近记录: |