programing

HTML 페이지에서 데이터를 React 컴포넌트로 전달하는 올바른 방법이 있습니까?

telebox 2023. 3. 13. 20:22
반응형

HTML 페이지에서 데이터를 React 컴포넌트로 전달하는 올바른 방법이 있습니까?

이런 리액트 앱이 있어요.

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

피드 프롭은 특정 고객 고유의 컴포넌트 DidMount에서 JSON 피드를 얻기 위해 사용됩니다.

HTML에서 데이터를 리액트 앱으로 전달하여 파라미터화하는 것이 편리합니다.

<html>
  <body>
    <div id="app" feed='custom_feed.json'></div>
  </body>
</html

현재의 솔루션은 다음과 같습니다.

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

이것은 분명히 효과가 있지만 좀 더 관용적인 해결책이 있어야 할 것 같다.이를 위한 더 많은 React 방법이 있습니까?

사용한 적이 있다data-다양한 소품에 대한 속성을 가진 다음 파괴 기능을 사용하여 모든 소품을 전달합니다. 예를 들어, 다음과 같습니다.

HTML:

<div id="app" data-feed='custom_feed.json' data-someprop='value'></div>

JS:

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

편집:데모 바이올린
2018년 편집: 업데이트된 바이올린

React와 관련된 데이터를 포함하는 페이지가 동적으로 생성되는 것과 같은 문제가 있었습니다.

나는 단지 그것들을 세계적인 범위로 선언했을 뿐이다.

<script>
  window.foobles = [12,453,12];
  window.bahs = ["bah", "bah", "black sheep"];
</script>

..그러면..

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

네임스페이스의 관점에서 보면, 이것에는 몇개의 단점이 있을 가능성이 있습니다.

다음과 같이 컴포넌트를 마운트할 때 데이터를 전달할 수 있습니다.

<div id="root"></div>
<script>
    const data = { foo: 'bar' };
    ReactDOM.render(
        React.createElement(MyComponent, data),
        document.getElementById('root')
    );
</script>

React Habit은 재사용 및 확장이 가능한 무언가를 원하는 경우 이를 지원하는 프레임워크입니다.

리액트 컴포넌트를 이렇게 등록합니다.

containerBuilder.register(Feed).as('Feed')

그런 다음 HTML에서 소품으로 대상을 정의합니다.

<div data-component="Feed" data-prop-feed-src="/custom_feed.json">

리액트 해비타트는 HTML에 표시될 때마다 이러한 내용을 연결합니다.

공개:저는 이 프레임워크의 주요 관리자들 중 한 명입니다.

언급URL : https://stackoverflow.com/questions/36545118/is-there-a-right-way-to-pass-data-into-a-react-component-from-the-html-page

반응형