javascript - 使用 Reactjs 使用 props 取消选中复选框和单选按钮
问题描述
我想取消选中我的复选框,但它确实取消了选中,但在取消选中后它给出了错误
console.log()
var x = document.getElementsByName("checkbox");
for(let i=0; i<=x.length; i++) {
x[i].Checked = false;
}
}
<button onClick={() => clearClickHandler()}>Clear all filter</button>
<input type="checkbox" name="checkbox" defaultChecked={false} onChange={() => sortDispatch({payload: "INCLUDE_OUT_OF_STOCK"})}></input>
Include out of stock
</label>
解决方案
问题
直接 DOM 突变在 React 中是反模式,即使由于更改发生在 React外部而没有引发错误,React 也不会意识到更改并且不会重新渲染 UI。
var x = document.getElementsByName("checkbox");
for(let i = 0; i <= x.length; i++) {
x[i].Checked = false; // <-- mutation!!! should probably also be `.checked`
}
解决方案
您可以将完全不受控制的组件与 key 一起使用。
为了在移动到不同项目时重置值(如在我们的密码管理器场景中),我们可以使用特殊的 React 属性,称为
key
. 当 akey
发生变化时,React 将创建一个新的组件实例,而不是更新当前的。键通常用于动态列表,但在这里也很有用。
这是一个使用 React 键对一组输入应用的示例演示。
function App() {
const [key, setKey] = useState(0);
const clearClickHandler = () => setKey((k) => k + 1);
return (
<div className="App">
<Fragment key={key}> // <-- React key updates will "reset" inputs
<label>
<input type="checkbox" name="checkbox1" defaultChecked={false} />
Include out of stock
</label>
<label>
<input type="checkbox" name="checkbox2" defaultChecked={false} />
Include out of stock
</label>
<label>
<input type="checkbox" name="checkbox3" defaultChecked={false} />
Include out of stock
</label>
</Fragment>
<div>
<button onClick={clearClickHandler}>Clear all filter</button>
</div>
</div>
);
}
推荐阅读
- python - 熊猫用另一列中的值替换列中的值
- c++ - 如何使用 itk 上的新功能更改这些旧功能
- reactjs - React & Typescript:省略带有扩展语法的道具会导致打字稿错误。高级类型
- arrays - LeetCode TwoSum question returning buggy answer (C Implementation)
- wordpress - Wordpress 在另一个函数中从 wp_signon 获取登录错误
- spring-cloud-contract - 在spring cloud contrat maven插件上指定版本
- javascript - 用 HTML 表单中的数据填充 Excel 电子表格单元格
- python - 为什么我的 import scapy.all 根本不起作用?
- javascript - 在状态发生突变之前调用 SetState 回调
- perl - Intellij Perl5 添加 Perl5 解释器