首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TextNode可以使用`ref`吗?

TextNode可以使用`ref`吗?
EN

Stack Overflow用户
提问于 2017-08-13 06:17:03
回答 2查看 463关注 0票数 2

这一点:

代码语言:javascript
复制
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>元素:

代码语言:javascript
复制
<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

EN

回答 2

Stack Overflow用户

发布于 2017-08-13 13:54:08

不,您不能使用JSX引用这些字符串文字。这段代码被转换为:

代码语言:javascript
复制
render(React.createElement(
  "b",
  { ref: function ref(e) {
      return $container = e;
    } },
  "one",
  "two",
  "six"
), document.getElementById("root"));

它们不是React元素,而是字符串,你可以用Babel Repl检查它。解决这个问题的一种方法是将这些元素包装在<span>标记中,这样就可以附加一个引用。

代码语言:javascript
复制
$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")
);
票数 0
EN

Stack Overflow用户

发布于 2018-01-21 23:03:54

下面是我所做的:我创建了一个仅由文本组成的组件,并使用ReactDOM.findDOMNode在DOM中引用了它的TextNode,如下所示:

代码语言:javascript
复制
class TextNode extends React.Component {

  componentDidMount() {
      this.textNode = ReactDOM.findDOMNode(this); // Will be the DOM text node
  }

  render() {
    return this.props.text;
  }

}

在您的示例中,我可以这样做:

代码语言:javascript
复制
render(
  <b>
    <TextNode text={"one"} />
    <TextNode text="two" />
    <TextNode text={"six"} />
  </b>,
  document.getElementById("root")
);

生成的超文本标记语言不会有任何spans:

代码语言:javascript
复制
<b>onetwosix</b>

而DOM将有一个包含3个文本节点的<b>元素。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45655388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档