这一点:
import React from "react";
import { render } from "react-dom";
let $container;
render(
<b ref={e => ($container = e)}>
{"one"}two{"six"}
</b>,
document.getElementById("root")
);
console.log($container);将为我获取<b>元素:
<b>
<!-- react-text: 2 -->
"one"
<!-- /react-text -->
<!-- react-text: 3 -->
"two"
<!-- /react-text -->
<!-- react-text: 4 -->
"six"
<!-- /react-text -->
</b>但是,如果我想要引用其中一个TextNodes怎么办?
有没有一个公共的api呢?也许可以为TextNodes提供一个特殊的type,这样我就可以将道具传递给createElement
发布于 2017-08-13 13:54:08
不,您不能使用JSX引用这些字符串文字。这段代码被转换为:
render(React.createElement(
"b",
{ ref: function ref(e) {
return $container = e;
} },
"one",
"two",
"six"
), document.getElementById("root"));它们不是React元素,而是字符串,你可以用Babel Repl检查它。解决这个问题的一种方法是将这些元素包装在<span>标记中,这样就可以附加一个引用。
$refs = {};
render(
<b>
<span ref={e => $refs.one = e}>one</span>
<span ref={e => $refs.two = e}>{'two'}</span>
<span ref={e => $refs.three = e}>three</span>
</b>,
document.getElementById("root")
);发布于 2018-01-21 23:03:54
下面是我所做的:我创建了一个仅由文本组成的组件,并使用ReactDOM.findDOMNode在DOM中引用了它的TextNode,如下所示:
class TextNode extends React.Component {
componentDidMount() {
this.textNode = ReactDOM.findDOMNode(this); // Will be the DOM text node
}
render() {
return this.props.text;
}
}在您的示例中,我可以这样做:
render(
<b>
<TextNode text={"one"} />
<TextNode text="two" />
<TextNode text={"six"} />
</b>,
document.getElementById("root")
);生成的超文本标记语言不会有任何spans:
<b>onetwosix</b>而DOM将有一个包含3个文本节点的<b>元素。
https://stackoverflow.com/questions/45655388
复制相似问题