javascript - React - 单击事件立即触发所有同级

标签 javascript reactjs

我怎样才能拥有每个 <li />收到 onClick事件仅一次一个单独触发?

我的目的是根据点击事件更改颜色并显示/隐藏内容。它有效,但是单击给定的 <li/>所有其 sibling 也同时被解雇。

我怎样才能防止这种情况发生?

here's sandbox code

function App() {
  return (
    <div className="App">
      <Market />
    </div>
  );
}

class Market extends Component {
  constructor() {
    super();
    this.state = {
      isColor: false,
      isShow: false,
      fruits: ["Apple", "Banana", "Peach"]
    };
  }

  handleToggle = () => {
    this.setState(currentState => ({
      isColor: !currentState.isColor,
      isShow: !currentState.isShow
    }));
  };

  render() {
    const fruits = this.state.fruits.map((item, i) => (
      <li
        key={i}
        className={this.state.isColor ? "blue" : "red"}
        onClick={this.handleToggle}
      >
        {item}
        <span className={this.state.isShow ? "show" : "hide"}>Show Text</span>
      </li>
    ));
    return <ul>{fruits}</ul>;
  }
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

最佳答案

您的<li>并不是全部都在开火。 所有元素都在检查状态以查看颜色和可见性是否为真。 因此,对于三个元素,你有一种状态,当其中一个为真时,它们都为真。

您要么想要为每个水果创建一个状态对象,或者更好的是,为每个都有自己状态的列表项创建一个新组件,并通过 prop 传递水果名称。

我已经 fork 了你的沙箱并创建了一个快速 example这看起来像什么。这是一个核心 React 概念,即将事物分解为可重用的模块,并在可能的情况下让组件管理自己的状态。从长远来看,现在真正把这个想法记下来确实对你有好处,所以我希望这会有所帮助。

关于javascript - React - 单击事件立即触发所有同级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53344008/

相关文章:

node.js - 将 Express.js 与 React.js 结合使用的推荐方式?

javascript - 创建一个填充 React 的按钮

javascript - 带有 useState 钩子(Hook)的 React 功能组件立即执行函数

javascript - 字符串属性未反序列化

javascript - 如何使用服务器的 JSON 响应动态填充灰尘模板?

javascript - jQuery 单击功能不适用于 ID

javascript - 如何验证 cucumberjs/puppeteer 中不存在的选择器?

javascript - 如何检查数组下是否存在值且差值小于 0.000002

reactjs - 可选路径 React Router 4

javascript - 在 React 中创建悬停工具提示