Javascript 使用npm&;时设置React组件初始道具;粗制滥造
我正在学习并遵循了《设置指南》Javascript 使用npm&;时设置React组件初始道具;粗制滥造,javascript,reactjs,browserify,Javascript,Reactjs,Browserify,我正在学习并遵循了《设置指南》npm,browserify,&babel。我现在可以从我的main.js文件中生成一个bundle.js文件,我可以将它包含在HTML页面中以呈现我的组件。到目前为止还不错 我不知道如何将index.html文件中的初始值传递到bundle.js中定义的组件中。我知道这是一个变量范围问题,因为ReactDOM和组件不是全局的 让我举个例子。比如在bundle.js中,我有一个名为Profile的React组件,它为给定的用户名生成一个小的Profile小部件。我不
npm
,browserify
,&babel
。我现在可以从我的main.js
文件中生成一个bundle.js
文件,我可以将它包含在HTML页面中以呈现我的组件。到目前为止还不错
我不知道如何将index.html
文件中的初始值传递到bundle.js
中定义的组件中。我知道这是一个变量范围问题,因为ReactDOM
和组件不是全局的
让我举个例子。比如在bundle.js
中,我有一个名为Profile
的React组件,它为给定的用户名生成一个小的Profile小部件。我不想在main.js
/bundle.js
中硬编码用户名值(就像许多示例一样)。我希望这是动态的,我可以在HTML页面中更改。因此,在我的index.html
页面中,我想做如下操作:
<body>
<div id="profile"></div>
<script src="bundle.js"></script>
<script>
ReactDOM.render(
<Profile user="bob" />,
document.getElementById('profile')
);
</script>
</body>
ReactDOM.render(
,
document.getElementById('profile')
);
当然,这不起作用,但希望能证明我想要完成什么。有人知道这样做的模式吗?谢谢。在这种情况下,您需要使用普通Javascript来创建元素,而不是JSX
<script>
var props = {
user: "bob",
};
// or you can even serialize data structure of your choice
// var props = <?php echo json_encode($profile); ?>;
ReactDOM.render(
React.createElement(Profile, props),
document.getElementById('profile')
);
</script>
您可以访问dom元素上的属性
user
,并将其传递给组件
下面是一个没有jsx的示例:
const profEl= document.getElementById('profile')
const Profile = React.createClass({
displayName: 'Profile',
render: function() {
return (
React.createElement('div', {
className: "prof"
},
profEl.attributes.user.value , ' is the name'
)
);
}
});
ReactDOM.render(
React.createElement(Profile, null),
profEl
);
我已经尝试过了,但是得到了一个JavaScript错误,没有定义
ReactDOM
。我的bundle.js
似乎将其变量保持为局部变量。将React
、ReactDOM
和我的组件显式设置为全局变量会是一种不好的做法吗?e、 例如,window.React=require('React')
,window.MyComponent=React.createClass({…})代码>
const profEl= document.getElementById('profile')
const Profile = React.createClass({
displayName: 'Profile',
render: function() {
return (
React.createElement('div', {
className: "prof"
},
profEl.attributes.user.value , ' is the name'
)
);
}
});
ReactDOM.render(
React.createElement(Profile, null),
profEl
);