如果在某些具有ref
属性的组件周围使用<Connector>
,则无法再通过this.refs
访问它。 我只是重构了一下以解决它-我猜想这有点白费智能组件和笨拙组件。 还是我缺少一些简单的东西?
智能与哑组件
我想是的,带有Connector
_smart_组件应该只渲染_dumb_组件并将所需的props
传递给它们。
@cymen,您可以为此使用ref回调:)
const decorator = (Base) => {
return class {
render() {
return <Base {...this.props} />
}
}
}
<strong i="7">@decorator</strong>
class Test {
render () {
return <div ref={this.props.refCallback}>my div</div>;
}
}
class Wrapper {
componentWillMount() {
this.nestedRef = null;
}
componentDidMount() {
console.log(React.findDOMNode(this.nestedRef));
}
setNestedRef = (ref) => {
this.nestedRef = ref;
}
render() {
return <Test refCallback={this.setNestedRef} />
}
}
上面将记录div。 也许有帮助吗?
这使用了一个装饰器,但是如果您将回调传递给嵌套在Connector
内的组件,则可能也可以正常工作。 然后,您可以在回调内部将引用分配回您的组件。
您是否真的需要嵌套引用?
如果只想访问DOM节点,则可以在外部组件上执行findDOMNode
,它会正常工作。 (它们将指向同一节点。)
如果要调用方法,请考虑使用props
作为声明性接口。 另请参阅https://github.com/jsstyles/react-jss/issues/15以获得有关此内容的讨论。
最后,如果你是_certain_你需要一个裁判,是的,你可以抓住一个嵌套的裁判一样@johanneslumpe中建议https://github.com/gaearon/redux/issues/183#issuecomment -115988937。
结束语,如果有不清楚的地方,请告诉我。
抱歉,但我看不出在这种琐碎的情况下如何鼓励使用'findDOMNode'甚至可以被视为解决方案。 这是反模式! 它使我们返回到jquery的日子,在这里我们需要访问所有元素并确切知道节点的层次结构。 您的文档正确阅读:
'findDOMNode()是一个逃生舱口...不建议使用此逃生舱口,因为它刺穿了组件抽象'
抱歉,但我看不出在这种琐碎的情况下如何鼓励使用'findDOMNode'甚至可以被视为解决方案。 这是反模式! 它使我们返回到jquery的日子,在这里我们需要访问所有元素并确切知道节点的层次结构。
我不确定你是什么意思。 我的意思是,如果需要引用渲染的节点(例如,计算其偏移量和大小),则可以使用findDOMNode(this)
。 我不建议您“深入”或变异它。
也就是说,如果您对此不满意,请按照上面的建议使用ref回调道具。
我认为我们不应该依赖findDOMNode(this)
,因为它不适用于React-Native。
@xvalentino findDOMNode不是必需的。 请参阅API文档中与getWrappedInstance
相关的位。
最有用的评论
抱歉,但我看不出在这种琐碎的情况下如何鼓励使用'findDOMNode'甚至可以被视为解决方案。 这是反模式! 它使我们返回到jquery的日子,在这里我们需要访问所有元素并确切知道节点的层次结构。 您的文档正确阅读:
'findDOMNode()是一个逃生舱口...不建议使用此逃生舱口,因为它刺穿了组件抽象'