Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 在React中放置ReactDOM.render的位置_Reactjs - Fatal编程技术网

Reactjs 在React中放置ReactDOM.render的位置

Reactjs 在React中放置ReactDOM.render的位置,reactjs,Reactjs,下面是react的示例,在该示例中,下面的代码片段位于单独的main.js文件中: ReactDOM.render( <h1>Hello, world!</h1>, document.getElementById('example') ); ReactDOM.render( 你好,世界!, document.getElementById('示例') ); 如果有一些页面不包含id:“example”,例如home.html(只有id:example1)、ind

下面是react的示例,在该示例中,下面的代码片段位于单独的main.js文件中:

ReactDOM.render(
  <h1>Hello, world!</h1>,
  document.getElementById('example')
);
ReactDOM.render(
你好,世界!,
document.getElementById('示例')
);

如果有一些页面不包含id:“example”,例如home.html(只有id:example1)、index.html(只有id:example2),那么如何重用
Hello,world在那些页面中?

示例元素只是应用程序的安装点。查看您将学习如何组合基本组件的位置。之后,您可以使用路由器在页面/视图之间进行切换。

您遇到了一个有效的问题。您可以从main.js文件中提取硬编码的#id部分。与其将main.js看作一个自引导的React应用程序,不如公开它的参数化版本

这里是新的main.js

window.renderApp = function(id){
  ReactDOM.render(
    <h1>Hello, world!</h1>,
    document.getElementById(id)
  );
};
window.renderApp=函数(id){
ReactDOM.render(
你好,世界!,
document.getElementById(id)
);
};
在您的index.html文件中

<div id="newID"></div>
<script src="main.js"></script>
<script>
  renderApp('newID');
</script>

renderApp(“newID”);

我见过使用这种方法,我自己也在几个生产应用程序中使用过这种方法。基本上,用硬编码的id参数绑定React应用程序是不符合逻辑的。

凯末尔的答案很好,我只是想分享我的解决方案

这些天来,我将在顶层组件上公开一个静态
init(id,props)
方法,该方法执行初始安装,而不是直接挂在
窗口上

export default class App extends Component {
    ...
    static init(id, props) {
        return ReactDOM.render(
            <App {...props} />,
            document.getElementById(id)
        );
    }
    ...
}
导出默认类应用程序扩展组件{
...
静态初始化(id、道具){
返回ReactDOM.render(
,
document.getElementById(id)
);
}
...
}
然后在我的主机页面:

<div id="container"></div>
<script>
App.init('container', { ... });
</script>

App.init('container',{…});

我已经阅读了该教程,但无论如何,您需要渲染组件,通常会按id渲染。如果代码在单独的js文件中,如何将其包含在其他页面中并呈现多个div您将只呈现应用程序的父组件,而父组件又将呈现其所有子组件–从而在
#example
元素中呈现整个应用程序。我的问题是如何在不同页面中呈现父组件或在一个页面中多次呈现父组件为什么您需要在一个页面上多次呈现父组件吗?您可以使用其中一个路由器模块基于URL呈现内容。或者,如果您需要多个html文件和不同的id,您可以使用Kemal建议的方法。只想重用一个组件,我也更喜欢Kemal建议的方法。您是否遇到错误:ReferenceError:renderApp在使用webpack构建react时未定义?它应该是
window.renderApp=function(id){ReactDOM.render(你好,world!,document.getElementById(id));}
@fudy,是的,你是对的,但是通过指定窗口全局变量来输出不是一个好的做法。最好是使用output.libraryTarget和output.library来控制你如何公开你的功能。为了简单起见,我将更新我的示例以使用window方法。谢谢。@KemalDağ你救了我一天!干杯兄弟:)这看起来比Kernal的方法好得多,但我得到了“App未定义”-编译的JS文件中没有“App”