小编典典

React JSX中的不确定复选框

reactjs

如何通过JSX呈现不确定的复选框?

这是我尝试过的:

function ICB({what}) {
  return <input type="checkbox"
                checked={what === "checked"} 
                indeterminate={what === "indeterminate"} />;
}

但是,indeterminate不是属性HTMLElement,而是 属性 。如何从React / JSX设置属性?


解决方案

由于以下大多数答案都使用findDOMNodestringrefs,而这两个在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>

阅读 301

收藏
2020-07-22

共1个答案

小编典典

您可以使用componentDidMount步骤(在初始渲染之后调用)来设置该属性:

componentDidMount() {
    React.findDOMNode(this).indeterminate = this.props.state === "indeterminate";
}

如果要使用后续渲染更新该属性,请也执行相同的操作componentDidUpdate

2020-07-22