Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.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 在同一页面上加载ReactJS组件,覆盖其他组件_Javascript_Reactjs_React Router - Fatal编程技术网

Javascript 在同一页面上加载ReactJS组件,覆盖其他组件

Javascript 在同一页面上加载ReactJS组件,覆盖其他组件,javascript,reactjs,react-router,Javascript,Reactjs,React Router,我有一个包含其他组件的主组件。其中一个组件是多步骤注册表单,它有三个步骤-1。选择计划,2。帐户详细信息和3。谢谢你,佩奇。“主页”组件显示多步骤注册表单的第一步,即“选择计划”组件 class MyComponent extends React.Component { \\all your logic and inside the render function: switch (step) { case 1: return ( <

我有一个包含其他组件的主组件。其中一个组件是多步骤注册表单,它有三个步骤-1。选择计划,2。帐户详细信息和3。谢谢你,佩奇。“主页”组件显示多步骤注册表单的第一步,即“选择计划”组件

class MyComponent extends React.Component {

  \\all your logic and inside the render function:
  switch (step) {
      case 1:
        return (
          <Home {...props}/>
        );
      case 2:
        return (
          <Account
            {...props}
          />
        );
      case 3:
       return (
         <Home {...props}/>
       );

    }
  }

单击计划后,我希望Account组件在同一页面上打开,覆盖Home组件,而不是替换当前组件。同时,我希望道具能够传递给子组件

包含注册表单的主组件

class Home extends Component {
  render() {
    return (
      <div>
        <Video/>
        <Featured/>
        <SignUpForm />
      </div>
    );
  }
}
class Home扩展组件{
render(){
返回(
);
}
}
多步骤报名表-

import React, { Component } from "react";
import Plan from "./Plan";
import Account from "./Account";
import ThankYou from "./ThankYou";

export default class SignUpForm extends Component {
  state = {
    step: 1,
    account_type: "",
    first_name: "",
    last_name: "",
    email: "",
    password: "",
  };

  // Proceed to next step
  nextStep = () => {
    const { step } = this.state;
    this.setState({
      step: step + 1
    });
    console.log(this.state.step);
  };

  // Go back to previous step
  prevStep = () => {
    const { step } = this.state;
    this.setState({
      step: step - 1
    });
  };

  // Handle fields change
  handleChange = input => e => {
    this.setState({ [input]: e.target.value });
  };

  render() {
    const { step } = this.state;
    const {
      account_type,
      price,
      first_name,
      last_name,
      email,
      password,
      token
    } = this.state;
    const values = {
      account_type,
      price,
      first_name,
      last_name,
      email,
      password,
      token
    };

    switch (step) {
      case 1:
        return (
          <Plan
            nextStep={this.nextStep}
            handleChange={this.handleChange}
            values={values}
          />
        );
      case 2:
        return (
          <Account
            nextStep={this.nextStep}
            prevStep={this.prevStep}
            handleChange={this.handleChange}
            values={values}
          />
        );
      case 3:
       return <ThankYou />;

    }
  }
}
import React,{Component}来自“React”;
从“/Plan”导入计划;
从“/Account”导入帐户;
从“/Thankyu”导入Thankyu;
导出默认类SignUpForm扩展组件{
状态={
步骤:1,
帐户类型:“”,
名字:“,
姓氏:“,
电邮:“,
密码:“”,
};
//继续下一步
下一步=()=>{
const{step}=this.state;
这是我的国家({
步骤:步骤+1
});
console.log(this.state.step);
};
//返回上一步
prevStep=()=>{
const{step}=this.state;
这是我的国家({
步骤:步骤-1
});
};
//处理字段更改
handleChange=input=>e=>{
this.setState({[input]:e.target.value});
};
render(){
const{step}=this.state;
常数{
账户类型,
价格,
名字,
姓,
电子邮件,
密码,
代币
}=本州;
常量值={
账户类型,
价格,
名字,
姓,
电子邮件,
密码,
代币
};
开关(步骤){
案例1:
返回(
);
案例2:
返回(
);
案例3:
返回;
}
}
}

我不太清楚您是否想让它保持在屏幕顶部

<Video/>
<Featured/>

如果您正在为应用程序使用类似React Navigation的内容,您可以通过这种方式传递参数,而不是使用switch语句,请使用Navigation.navigate进入您选择的特定屏幕


那么您想要
主组件的孙子来覆盖主组件?你不能这样做

如果您想要覆盖的原因是您不想显示
视频
特色
组件,只需将“步骤”逻辑上移到
组件即可。然后您可以像这样返回:

switch (step) {
      case 1:
        return (
          <Video />
          <Featured />
          <Plan
            nextStep={this.nextStep}
            handleChange={this.handleChange}
            values={values}
          />
        );
      case 2:
        return (
          <Account
            nextStep={this.nextStep}
            prevStep={this.prevStep}
            handleChange={this.handleChange}
            values={values}
          />
        );
      case 3:
       return (
        <Video>
        <Featured />
        <ThankYou />
       );

    }
开关(步骤){
案例1:
返回(
);
案例2:
返回(
);
案例3:
返回(
);
}
如果您真的想替换主组件,请将所有逻辑向上移动一个或多个组件,即高阶组件

class MyComponent extends React.Component {

  \\all your logic and inside the render function:
  switch (step) {
      case 1:
        return (
          <Home {...props}/>
        );
      case 2:
        return (
          <Account
            {...props}
          />
        );
      case 3:
       return (
         <Home {...props}/>
       );

    }
  }

类MyComponent扩展了React.Component{ \\渲染函数中的所有逻辑和参数: 开关(步骤){ 案例1: 返回( ); 案例2: 返回( ); 案例3: 返回( ); } }

请记住,当向上移动逻辑时,状态在较低的组件中成为道具,您需要将状态从较高组件中的逻辑向下传递为道具。

谢谢!这有帮助。我会用这个逻辑来工作