Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我们可以直接将setState传递给按钮元素吗?_Javascript_Reactjs - Fatal编程技术网

Javascript 我们可以直接将setState传递给按钮元素吗?

Javascript 我们可以直接将setState传递给按钮元素吗?,javascript,reactjs,Javascript,Reactjs,通常,我会将setVisFalse作为prop传递给Modal,然后在调用它的Modal组件中定义一个按钮,但我希望使Modal动态化,这样,它可以是定义onClick事件侦听器的任何其他组件,而不是按钮 下面的代码运行良好,但我想知道它是正确的方法吗 const Parent = () => { const [vis, setVis] = useState(false); return ( <> {vis && (

通常,我会将setVisFalse作为prop传递给Modal,然后在调用它的Modal组件中定义一个按钮,但我希望使Modal动态化,这样,它可以是定义onClick事件侦听器的任何其他组件,而不是按钮

下面的代码运行良好,但我想知道它是正确的方法吗

const Parent = () => {
  const [vis, setVis] = useState(false);
  return (
    <>
      {vis && (
        <Modal>            // generally, i pass here a setVisFalse as a prop.
          <h1>Hello Modal</h1>
          <button onCLick={setVisFalse}>Close Modal</button> // directly defining onCLick here only.
        </Modal>
      )}
    </>
  );
};

export default class Modal extends React.Component {
  render() {                                                    // instead of definig a button here,
    return <div className="modal">{this.props.children}</div>      it should be already inside children
                                                                 
  }
}

使用UseContextAPI


pros-可用于任何嵌套级别的子级。

您显然希望将布尔值传递给vis状态,因此您的操作方式无法实现这一点 你需要这样做

const Parent = () => {
  const [vis, setVis] = useState(false);
  const setVisState = () => {
        setVis(value => !value);
}
  return (
    <>
      {vis && (
        <Modal>            // generally, i pass here a setVisFalse as a prop.
          <h1>Hello Modal</h1>
          <button onCLick={setVisState }>Close Modal</button> // directly defining onCLick here only.
        </Modal>
      )}
    </>
  );
};


按下按钮时需要vis值变为false?是的,这很好。模态组件只是一个没有业务规则的UI抽象。孩子们自己处理自己的事情。这种类型的组件设计一直在进行。@MarcCharpentier Yes.setVisState是一个函数,类似于代码中的toggleModal,我只是在代码中没有提到。啊,好的,我更新了它