【发布时间】:2015-08-21 11:43:20
【问题描述】:
如何通过 JSX 渲染不确定的复选框?
这是我尝试过的:
function ICB({what}) {
return <input type="checkbox"
checked={what === "checked"}
indeterminate={what === "indeterminate"} />;
}
但是,indeterminate 不是HTMLElement 的属性,而是一个属性。如何从 React / JSX 设置属性?
解决方案:
由于下面的大多数答案都使用 findDOMNode 或 string refs,这两者在 React 中不再被认为是好的做法,所以我编写了一个更现代的实现:
function ICB() {
const [state, setState] = React.useState(0);
const indetSetter = React.useCallback(el => {
if (el && state === 2) {
el.indeterminate = true;
}
}, [state]);
const advance = () => setState(prev => (prev + 1) % 3);
return <input type="checkbox"
checked={state === 1}
ref={indetSetter}
onClick={advance} />;
}
ReactDOM.render(<ICB />, document.getElementById("out"));
<div id="out"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.13.1/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.13.1/umd/react-dom.production.min.js"></script>
【问题讨论】:
-
你好。我尝试使用您的解决方案来解决我的问题(嵌套复选框),但它一直返回 null。你能帮忙解决一下吗?
标签: javascript reactjs