有没有一种正确的方法将数据从HTML页面传递到React组件?

sup*_*ary 29 reactjs

我有一个像这样的React应用程序.

var X = React.createClass({
  componentDidMount: function() {
    fetch(this.props.feed).then(...);
  }
  render: function() {
    return <div>{this.props.feed}</div>
  }
});
Run Code Online (Sandbox Code Playgroud)

feed prop用于获取componentDidMount中的JSON提要,该提取对于特定客户是唯一的.

将数据从HTML传递到我的React应用程序以便对其进行参数化是很方便的:

<html>
  <body>
    <div id="app" feed='custom_feed.json'></div>
  </body>
</html
Run Code Online (Sandbox Code Playgroud)

我目前的解决方案如下:

var root = document.getElementById('app');
var feed = root.getAttribute('feed')
ReactDOM.render(<X feed={feed}/>, root);
Run Code Online (Sandbox Code Playgroud)

这显然有效,但感觉应该有一个更惯用的解决方案.是否有更多的React方法来做到这一点?

paw*_*wel 52

我已经使用data-各种道具的属性,然后使用解构传递所有道具{...dataset},例如:

HTML:

<div id="app" data-feed='custom_feed.json' data-someprop='value'></div>
Run Code Online (Sandbox Code Playgroud)

JS:

var root = document.getElementById('app');
ReactDOM.render(<X {...(root.dataset)} />, root);
Run Code Online (Sandbox Code Playgroud)

编辑:演示小提琴
编辑2018:更新小提琴

  • 1."data-"属性旨在用于此目的,而不是发明无效的属性,2.您不必为要传递的每个额外的prop要键入`.getAttribute`,所有这些都在` dataset`. (2认同)
  • 这是一个很好的解决方案! (2认同)

Sp4*_*cat 6

我遇到了类似的问题,动态生成的页面包含与React相关的数据.

我刚刚在全球范围内宣布它们.

<script>
  window.foobles = [12,453,12];
  window.bahs = ["bah", "bah", "black sheep"];
</script>
Run Code Online (Sandbox Code Playgroud)

.. 然后 ..

ReactDOM.render(
  <Component
    foobles={window.foobles}
    bahs={window.bah}
  />,
  document.getElementById('app')
)
Run Code Online (Sandbox Code Playgroud)

显然,从命名空间的角度来看,这可能有一些缺点:)