Javascript 默认情况下,道具是否通过“this”从父级传递给子级?
我正在通过一个开源项目学习。我已经部署了它,它可以工作了。因此,下面粘贴的代码肯定是有效的 我正在查看Javascript 默认情况下,道具是否通过“this”从父级传递给子级?,javascript,reactjs,Javascript,Reactjs,我正在通过一个开源项目学习。我已经部署了它,它可以工作了。因此,下面粘贴的代码肯定是有效的 我正在查看Header.js中的Header组件: class Header extends React.Component { state = { open: false, }; render() { const { classes, toggleDrawerOpen, margin, turnDarker, } =
Header.js
中的Header
组件:
class Header extends React.Component {
state = {
open: false,
};
render() {
const {
classes,
toggleDrawerOpen,
margin,
turnDarker,
} = this.props;
return (
.... some code ....
)
我看到classes
作为一个道具从父级传递。因此,我查看了父组件,仪表板
。代码如下:
import { Header, Sidebar, BreadCrumb } from './../../components';
import { toggleAction, openAction, playTransitionAction } from './../../actions/UiActions';
import styles from './appStyles-jss';
class Dashboard extends React.Component {
state = {
transform: 0,
};
componentDidMount = () => {
// Scroll content to top
const mainContent = document.getElementById('mainContent');
mainContent.addEventListener('scroll', this.handleScroll);
// Set expanded sidebar menu
const currentPath = this.props.history.location.pathname;
this.props.initialOpen(currentPath);
// Play page transition
this.props.loadTransition(true);
// Execute all arguments when page changes
this.unlisten = this.props.history.listen(() => {
mainContent.scrollTo(0, 0);
setTimeout(() => {
this.props.loadTransition(true);
}, 500);
});
}
componentWillUnmount() {
const mainContent = document.getElementById('mainContent');
mainContent.removeEventListener('scroll', this.handleScroll);
}
handleScroll = (event) => {
const scoll = event.target.scrollTop;
this.setState({
transform: scoll
});
}
render() {
const {
classes, // classes is here
route,
toggleDrawer,
sidebarOpen,
loadTransition,
pageLoaded
} = this.props;
const darker = true;
return (
<div className={classes.appFrameInner}>
// NOTE: Header component is here but I don't see how classes is passed to it.
<Header toggleDrawerOpen={toggleDrawer} turnDarker={this.state.transform > 30 && darker} margin={sidebarOpen} />
<Sidebar
open={sidebarOpen}
toggleDrawerOpen={toggleDrawer}
loadTransition={loadTransition}
turnDarker={this.state.transform > 30 && darker}
/>
<main className={classNames(classes.content, !sidebarOpen && classes.contentPadding)} id="mainContent">
<div className={classes.bgbar} />
</main>
</div>
);
}
}
从“/../../components”导入{标题、边栏、面包屑};
从“/../../actions/UiActions”导入{toggleAction、openAction、playTransitionAction};
从“/appStyles jss”导入样式;
类Dashboard扩展了React.Component{
状态={
转换:0,
};
componentDidMount=()=>{
//将内容滚动到顶部
const mainContent=document.getElementById('mainContent');
mainContent.addEventListener('scroll',this.handleScroll);
//设置扩展侧边栏菜单
const currentPath=this.props.history.location.pathname;
this.props.initialOpen(currentPath);
//播放页面转换
this.props.loadTransition(true);
//页面更改时执行所有参数
this.unlisten=this.props.history.listen(()=>{
mainContent.scrollTo(0,0);
设置超时(()=>{
this.props.loadTransition(true);
}, 500);
});
}
组件将卸载(){
const mainContent=document.getElementById('mainContent');
mainContent.removeEventListener('scroll',this.handleScroll);
}
handleScroll=(事件)=>{
const scoll=event.target.scrollTop;
这是我的国家({
变换:烤饼
});
}
render(){
常数{
类,//类在这里
路线
扳动抽屉,
边栏,
负载转换,
页面加载
}=这是道具;
常数变暗=真;
返回(
//注意:这里有Header组件,但我看不到类是如何传递给它的。
30&&深色}边距={sidebarOpen}/>
30&较暗}
/>
);
}
}
您可以看到类
道具是从仪表板
的父级传递的。但是,我希望有一些语法显示它被传递到子头组件中。
查看代码中的“注意”行,没有提到将整个道具传递给标题
组件或将常量类
特别传递给标题
如何将类
从父级(Dashbaord)传递到子级(Header)?类
道具不会从父级仪表板
传递到子级Header
类
道具可通过以下方式直接提供给标题
组件:
这种方法在JS中通常被称为CSS,您可以阅读更多详细文档。类属性不会从仪表板传递到标题,正如您在render方法中看到的那样。我猜其中包含了一些高阶的成分,比如,但是如果没有一个,很难说。简短的回答是否定的:并不是所有的道具都是从父级自动传递给子级的。两个类的道具的值是多少?为什么你认为它们会一直传递到标题
子项?是的,这是一个HOC(我猜得很对!):@jornsharpe谢谢。现在我将学习高阶组件。
export default withStyles(styles)(Header);