React返回一个null元素,我找不到原因

发布时间:2020-07-07 17:38

我只是在学习React的基础知识,我在执行以下代码时遇到了麻烦,可能会提示我正确运行它。

我想要做的是将div渲染到根元素中,一旦单击它,display属性应该切换。这是通过“消失”功能完成的。

const JSX = (
  <div id="myDiv" className = "myDiv">
    <h1>Add a class to this div</h1>
  </div>
);

const dissappear = (element) => {
element.style.display==="none" ? element.style.display==="block" : element.style.display==="none"
}


ReactDOM.render(JSX, document.getElementById("root"))

let myDiv = document.getElementById("myDiv");
myDiv.onclick = dissappear(myDiv)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.0/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.0/umd/react-dom.production.min.js"></script>

<div id='root'>
</div>


编辑:根据建议,我现在在呈现页面中的元素之后调用该函数。

回答1

这不是您在React中处理click事件的方式:

let myDiv = document.getElementById("myDiv");
myDiv.onclick = dissappear(myDiv);

出于几个原因:

  1. 该元素尚不存在,因为调用此元素时尚未呈现任何内容。
  2. 您在这里呼叫 disappear,并将其 result (即undefined,因为它不返回任何内容)设置为点击处理程序。因此,函数本身仅被调用一次,而不被设置为单击处理程序。 (一般来说,这不仅适用于JavaScript,而且适用于JavaScript。)
  3. 这不是惯用的React。

旁注:您的dissappear函数中也存在逻辑错误。可以比较方便地先使用=== ,然后再分配=进行剩余的使用。

相反,设置onclick处理程序in the React JSX element itself,并引用传递给该处理程序的事件的目标:

const dissappear = (e) => {
  e.target.style.display==="none" ? e.target.style.display="block" : 
  e.target.style.display="none";
};

const JSX = (
  <div id="myDiv" className="myDiv" onClick={dissappear}>
    <h1>Add a class to this div</h1>
  </div>
);

例如:

const dissappear = (e) => {
  e.target.style.display==="none" ? e.target.style.display="block" : 
  e.target.style.display="none";
};

const JSX = (
  <div id="myDiv" className="myDiv" onClick={dissappear}>
    <h1>Add a class to this div</h1>
  </div>
);

ReactDOM.render(JSX, document.getElementById("root"))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id='root'></div>