是否可以将html元素宽度传递给无状态子组件?

时间:2016-09-07 21:30:22

标签: reactjs

我有一个无状态容器组件和一个无状态子表组件。该表需要知道父组件的外部div的宽度,以用作maxWidth。我无法将这个值传给孩子。

首先,我让父对其最外面的渲染div传递一个回调方法,作为ref将ref作为变量存储在父对象上(ref在div上;我知道无状态组件不能有refs) ,但是如果我然后尝试将ReactDOM.findDOMNode(parentVarContainingRefToDiv).offsetWidth传递给子节点,它会抱怨子节点渲染必须是纯粹的并且不包含陈旧的引用。如果我从父节点传递一个返回宽度的方法,就会发生同样的事情。

我试图让父有状态并将宽度保存为传递状态,但我无法找到一个好的生命周期来执行此操作(WillUpdate无休止地呈现状态是否在那里更改)。我考虑过使用WillUpdate和ShouldUpdate进行组合,但如果它甚至可以工作的话听起来很蹩脚。

我考虑的另一件事是向孩子发送一个方法,用它向父母发回另一个方法,用于在孩子身上存储宽度值。听起来也很吵。

我站在哪里听起来似乎合情合理,就是让孩子变得有状态,并在WillReceiveProps中做一些棘手的事。

这是唯一的方法吗?如果可能的话,我想保持两个组件无状态。

很抱歉没有代码,我循环浏览了几个不同的版本来提出上述方案,但如果无代码问题无法忍受,我可以尝试重新创建它们。

1 个答案:

答案 0 :(得分:0)

在Reactjs中,如果你需要使用findDOMNode,你就不会尊重React的原理和结构。你应该使用它。尝试在线寻找组件。 Like this one;)

从DOM获取组件会破坏React项目的客观层次结构。