如何有条件地添加或不点击一个div作出反应?

Rad*_*dex 14 javascript reactjs

我想知道是否可以onClick根据我的情况中的属性值设置响应中的div元素canClick.

我知道我可以直接检查this.state handler而不是我正在寻找一个内部实现的解决方案render.

...
handler(){
}

render() {
  const { canClick} = this.state
  return (
    <div onClick={this.handler}>hello</div>
  )
}
...
Run Code Online (Sandbox Code Playgroud)

May*_*kla 16

把这样的条件:

onClick={canClick ? this.handler : false or null}
Run Code Online (Sandbox Code Playgroud)

工作守则:

class App extends React.Component {
  
   _click(){
      // it will not print the value
      console.log('yes');
   }

   render(){
      return (
        <div>
          <div onClick={false? this._click: null}>Click</div>
        </div>
      )
   }
}

ReactDOM.render(<App />, document.body);
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

  • 当评估为“false”时,我仍然收到错误。我成功地使用了其他答案中的“未定义”。 (4认同)

小智 8

你可以用这个

{...(condition ? { onClick: () => {handleClick()}} : {})}
Run Code Online (Sandbox Code Playgroud)

  • 虽然此代码片段可以解决问题,但它没有解释为什么或如何回答问题。请[包括对您的代码的解释](//meta.stackexchange.com/q/114762/269535),因为这确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而那些人可能不知道您建议代码的原因。 (2认同)

jor*_*edo 7

您可以将元素属性(如onClick)视为对象属性。使用价差运算符仅在满足条件的情况下摊开onClick:

<div
  {...(canClick && { onClick: this.handler })}
>
  hello
</div>
Run Code Online (Sandbox Code Playgroud)

  • 这是正确的答案,使用这个人,没有必要像 Mayank Shukla 的上述答案那样创建 onclick="null" 。 (3认同)
  • @ChristiaanWesterbeek `null` 可能不会抛出错误,但在 prop 树中仍然会显示为 `onClick: null` ,这是不推荐的。`undefined` 不会出现在 prop 树上。我已经更新了最重要的答案以反映这一点。这更进一步,将其从 prop obj 中完全删除,甚至删除了它们的键值。 (2认同)

Mos*_*ini 6

是的,您可以使用 ternaru 运算符,它将左侧评估为布尔值,如果为真,则执行右侧或后备。

<div onClick={() => canClick ? this.handler() : () => false }>hello</div>
Run Code Online (Sandbox Code Playgroud)

https://stackblitz.com/edit/react-uwzn4n


tom*_*rsa 6

<div onClick={canClick ? this.handler : undefined} />
Run Code Online (Sandbox Code Playgroud)

如果您选择一个不同的falsy值而不是undefined此三元值(即falsenull),React(当前)将引发以下警告:

“如果您以前使用onClick = {condition && value}有条件地忽略它,请改为传递onClick = {condition?value:undefined}。”

  • 代码不会爆炸,我刚刚再次运行此代码,它工作正常。如果事件侦听器的值为“未定义”,则事件侦听器不会附加到 DOM 节点。上面的 JSX 通过 `React.createElement` 转换为一个对象,包括它的 props。在 DOM 中创建/更新实际节点时,任何值为“未定义”的内容都会被忽略且不会使用。 (2认同)