反应:访问元素的文本

Tho*_*son 8 javascript reactjs

我的组件在其他 render() 中使用,例如

return (<MyElem>Some text here</MyElem>)
Run Code Online (Sandbox Code Playgroud)

如何访问组件类中的“Some text here”字符串?

T.J*_*der 9

您使用children属性,它包含元素的子元素(可能是文本或子元素数组[我认为它不是文本时总是一个数组],请参阅链接以获取详细信息)。例如:

const Foo = props => {
  console.log(props.children);
  return (
    <div>{props.children}</div>
  );
};
ReactDOM.render(
  <Foo>Hi There</Foo>,
  document.getElementById("react")
);
Run Code Online (Sandbox Code Playgroud)
<div id="react"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

这使用了无状态功能组件 (SFC),但对于Component子类也是如此:

class Foo extends React.Component {
  render() {
    console.log(this.props.children);
    return (
      <div>{this.props.children}</div>
    );
  }
};
ReactDOM.render(
  <Foo>Hi There</Foo>,
  document.getElementById("react")
);
Run Code Online (Sandbox Code Playgroud)
<div id="react"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

这是一个children不仅适用于文本的事实示例:

class Foo extends React.Component {
  render() {
    console.log(this.props.children);
    return (
      <div>{this.props.children}</div>
    );
  }
};
ReactDOM.render(
  <Foo>
    <div>Hi there</div>
    <Foo><span>nested Foo > Foo > span</span></Foo>
  </Foo>,
  document.getElementById("react")
);
Run Code Online (Sandbox Code Playgroud)
<div id="react"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
Run Code Online (Sandbox Code Playgroud)