这:
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
?
答案 0 :(得分:0)
不,你不能使用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")
);
答案 1 :(得分:0)
这就是我所做的:我创建了一个仅由文本组成的组件,并在DOM中使用TextNode
引用其ReactDOM.findDOMNode
,如下所示:
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")
);
生成的HTML不会有任何span
s:
<b>onetwosix</b>
虽然DOM会有一个<b>
元素,里面有3个文本节点。