【问题标题】:ReactJS: Easily access state objects from data-reactid attributes?ReactJS:从 data-reactid 属性轻松访问状态对象?
【发布时间】:2016-02-05 04:55:30
【问题描述】:

我正在开发我的第一个 react 应用程序。我注意到对元素有贡献的状态偶尔会反映在 reactid 中。也许这是传递的钥匙? 我找不到很多关于 reactid 的文档,但我想知道是否有一种隔离这些键的好方法。

例如,我要更新的元素的 ID 为:.0.1.0.1.$4.3:$level.1 $ 代表我用来构建该 DOM 节点的状态对象的已知索引。 (具体来说就是this.state.figures[4].level这个对象)

如果我能用预定义的方法解析出这些 $ 值,那将是非常棒的,以便于 setState。有这种事吗?

这是我试图在顶级祖先定义的事件上设置状态以避免繁琐的双向事件处理。我的方法真的很愚蠢吗?

【问题讨论】:

    标签: reactjs


    【解决方案1】:

    如果我理解正确,您希望根据它们的data-reactid 将事件绑定到 DOM 节点?

    如果是这样 - 我认为这根本不是一个明智的想法。 data-reactid 属性是暂时的,它会在没有警告的情况下发生变化,并受到 React 生态系统中的许多事件的影响。

    我喜欢将 React 生成的 DOM 视为编译目标,我根本不应该与之交互。一个黑匣子,如果你愿意的话。

    如果您需要帮助解决事件问题,您可能需要自行描述。

    编辑

    您可以在 React 中添加事件处理程序,这些处理程序知道它们在迭代器中的位置,并知道组件的当前状态。

    <div>
      {
        things.map((thing, index) => {
          return (
            <li
              className="level"
              key={`level_${index}`}
              onClick={this.handleClick.bind(this, thing)}>
              { thing }
            </li>
          );
        });
      }
    </div>
    

    所以handleClick 会在单击时收到thing 项目,它可以为您提供有关该特定事物的信息。你也可以通过索引。在handleClick 中,您还可以访问this.state

    【讨论】:

    • 不。那确实是不明智的。我想做的是在使用 .on 处理程序定位元素后更新它的状态(例如:$(document).on('click', '.stat.level li', function(){//set some state based on the reactid of this}
    • 所以,你将一个事件处理程序绑定到一个 DOM 节点,然后当它被点击时,你想读取它的 react-id 并设置一些状态 - 什么样的状态?反应状态?如果是这样 - 为什么你不能在生成 ID 的 React 组件中绑定点击处理程序……这样你就已经知道元素的索引了?
    • this 的范围不是组件吗?所以我可以更改组件的状态,但不能更改其祖先的状态?我的理解是,需要传递事件处理程序,或者使用通量之类的东西来影响远祖的状态。不是这样吗? (我知道点击处理程序,但我也使用很多其他事件,如 keyup 和 touchstart。Jquery .on 在处理各种事件时感觉更敏捷(但我可能是错的)
    • 如果您在单击子组件时尝试改变祖先组件的状态,我当然会推荐一种类似通量的状态管理模式。这就是 Flux/redux 的明确设计目标。
    • ids的原因是react可以在异构(服务器端)渲染后“recconect”到html。要引用“dom 对象”,react 有一个名为“refs”的未来
    猜你喜欢
    • 2017-03-31
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-14
    • 2019-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多