[英]How do I pass props to child without the use of modules?
目标:从父级组件向子级发送属性并进行渲染。
问题:
import ChildComponent from 'someLocation';
注意:
例:
src/parent/child/index.js
const Child = ({ name }) => {
return (
// name is undefined!
<div>{name}, I am the child component</main>
);
};
ReactDOM.render(
React.createElement(Child),
document.querySelector('#Child')
);
src/parent/index.js
class Parent extends React.Component {
render() {
const name = "Giggles";
return (
<div>
<div id="Child" name={name}></div>
</div>
);
);
};
ReactDOM.render(
React.createElement(Parent),
document.querySelector('#Parent')
);
<html>
<head>dependencies in here, react, react-dom and babeljs</head>
<body>
<div id="Parent"></div>
</body>
<script src="src/parent/index.js"></script>
<script src="src/parent/child/index.js"></script>
</html>
您实际上可以将<html>
标记底部的脚本顺序更改为:
<html>
<head>dependencies in here, react, react-dom and babeljs</head>
<body>
<div id="Parent"></div>
</body>
<script src="src/parent/child/index.js"></script>
<script src="src/parent/index.js"></script>
</html>
因此,您将能够使用Parent
类访问文件中的Child
变量,因此传递props就像下面的代码一样简单:
class Parent extends React.Component {
render() {
const name = "Giggles";
return (
<div>
<Child name={name} />
</div>
);
);
};
另外,您应该在Child所在的文件中删除ReactDOM渲染,因此它将如下所示:
const Child = ({ name }) => {
return (
// name is undefined!
<div>{name}, I am the child component</main>
);
};
这是一个非常奇怪的限制。您说“请理解”,但我不是,所以我认为您应该解释原因。 它可以帮助您找到更好的解决方案。
这里的问题是双重的:
1)您的Parent组件实际上并没有渲染您的孩子,您只有一个id
为Child的div,这在React中是没有意义的。
2)父组件所在的脚本需要以某种方式访问子组件,并且如果没有模块捆绑器,则需要将其放在一个可以像window
一样到达的命名空间中
3)您正在渲染两个React树。 要将道具从一个组件传递到另一个组件,它们必须位于同一渲染树中。
const Child = ({ name }) => {
return (
<div>{name}, I am the child component</main>
);
};
window.Child = Child
-
const Child = window.Child
class Parent extends React.Component {
render() {
const name = "Giggles";
return (
<div>
<Child name={name} />
</div>
);
);
};
ReactDOM.render(
React.createElement(Parent),
document.querySelector('#Parent')
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.