【问题标题】:React setState hook is not working when trying to clear/empty/delete/set back to initial state尝试清除/清空/删除/设置回初始状态时,React setState 挂钩不起作用
【发布时间】:2020-11-02 18:38:20
【问题描述】:

我有一个clearState 函数,它在单击重新启动按钮时将一些 useState 挂钩设置回初始状态。但是,他们说我的 setState 不是函数。请检查以下代码:

App.js

...
const [question, setQuestion] = useState(0);
const [response, setResponse] = useState({});
const [answer, setAnswer] = useState({});
const [answerId, setAnswerId] = useState({});
...

Modal.js

const Modal = ({
  setResponse,
  setAnswer,
  setAnswerId,
  setQuestion,
  setAnswerNameArr,
}) => {
  const [open, setOpen] = useState(false);

  const clearState = () => {
    setOpen(false); //works
    setQuestion(0); //works
    setAnswer({}); //does not work
    setAnswerId({});
    setResponse({});
    setAnswerNameArr([]);
  };

...

  return (
    <Modal
       ...
    >
      ...
        <Button
           onClick={()=>handleSubmit()}
        >
           Restart
        </Button>
    </Modal>
  );
};

export default Modal;

错误:

Uncaught TypeError: setAnswer is not a function

提前致谢。

【问题讨论】:

    标签: javascript reactjs typeerror setstate use-state


    【解决方案1】:

    您似乎没有将状态设置挂钩传递给您的 &lt;Modal&gt;,因此它们不可用。

    无论如何,这样做不是一个好主意,tbh。如果您需要一个孩子来影响父母的状态,最好传递一个回调:

    const Modal = ({
          onSubmitCb
    }) => {
      const [open, setOpen] = useState(false);
    
      const clearState = () => {
        setOpen(false); //works
        setQuestion(0); //works
        onSubmitCb && onSubmitCb()
      };
    
    ...
    
      return (
        <Modal>
          ...
            <Button
               onClick={()=>handleSubmit()}
            >
               Restart
            </Button>
        </Modal>
      );
    };
    

    在你的父母中:

    const App = ()=>{
        const clearState = () => {
            setAnswer({});
            setAnswerId({});
            setResponse({});
            setAnswerNameArr([]);
      };
      
      .... 
    
      return {
          <Modal ... onSubmitCb={clearState} />
       }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-22
      • 1970-01-01
      • 1970-01-01
      • 2020-05-19
      • 2019-06-01
      • 2014-07-15
      • 1970-01-01
      相关资源
      最近更新 更多