Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.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
Javascript 默认情况下,道具是否通过“this”从父级传递给子级?_Javascript_Reactjs - Fatal编程技术网

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);