我只是在学习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>
编辑:根据建议,我现在在呈现页面中的元素之后调用该函数。
这不是您在React中处理click事件的方式:
let myDiv = document.getElementById("myDiv");
myDiv.onclick = dissappear(myDiv);
出于几个原因:
disappear
,并将其 result (即undefined
,因为它不返回任何内容)设置为点击处理程序。因此,函数本身仅被调用一次,而不被设置为单击处理程序。 (一般来说,这不仅适用于JavaScript,而且适用于JavaScript。)旁注:您的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>