【问题标题】:React js components renderReact js 组件渲染
【发布时间】:2020-03-22 06:21:21
【问题描述】:

你好,我现在开始反应,我有点困惑,我正在使用路由/私有路由,所以我创建了一个组件文件夹,我将在其中包含我的登录组件和我的登录 /index.js我在其中导入此组件的文件夹,但我毫无疑问有什么更好的方法来做到这一点:

我的 app.js:

import React, { Component } from 'react';
import './App.css';

import Routes from './routes';

function App() {
  return (
          <Routes/>
  );
}

export default App;

我的路线 js:

export default function Routes(){
    return(
        <BrowserRouter>
            <Switch>
                <Route path="/" exact component = {Login}/> //só chama rota se o caminho for exato; 
                <PrivateRoute path="/home" component = {DashBoard}/>              
            </Switch>
        </BrowserRouter>
    );
}

我的组件/登录表单:

import React, { Component } from 'react';

class LoginForm extends Component {
    constructor(props){
        super(props);
        this.state = {
            login:'',
            password:'',
            errors: {},
            isLoading: false
        };
        this.onSubmit = this.onSubmit.bind(this);
        this.onChange = this.onSubmit.bind(this);
    }
    onSubmit(e){
        e.preventDefault();
    }
    onChange(e){
        this.state({[e.target.name]: e.target.value});
    }

  render() {
    const { errors, login, password, isLoading } = this.state;
    return (
        <form onSubmit={this.onSubmit}>
            <label for="login">Login</label>
            <input type="text" id="login" value={login} error= {errors.login} onChange={this.onChange} placeholder="Informe seu login" />
            <label for="password">Senha</label>
            <input type="password" id="password" value={password} error= {errors.password} onChange={this.onChange}   placeholder="Informe sua senha"/>
        <button className="btnEnt" type="submit" disabled ={isLoading}>Entrar</button>
    </form>
    )
  }
}

export default LoginForm;

现在我有疑问,因为我将在我的登录页面中的 index.js 文件中调用我的登录 comp

index.js

import React, { Component } from 'react';
import loginComp from '../../components/LoginForm';


class Login extends Component {
    render() {
      return (
          <loginComp />
      )
    }
  }

  export default Login;

我没有错误,但它没有在屏幕上呈现任何内容

【问题讨论】:

  • 如果它是您在 LoginForm 中创建的组件,则在导入时执行以下操作: import {loginComp} from "../../Components/LoginForm" 这称为解构
  • 从 "../Components/pageName" 导入 LoginPage 并使用 代替 这将解决您的问题
  • @Ayushi Keshiri 你是什么意思我不明白你能回答吗?让我投票。

标签: javascript reactjs


【解决方案1】:

由于&lt;loginComp/&gt; 不是您在 LoginPage 中创建的组件,因此它不会呈现数据。你可以简单地改变

   import loginComp from '../../components/LoginForm';

to  import LoginForm from '../../components/LoginForm'; 

记住 /components/LoginForm 这是您保存的文件名,而不是您创建的组件。

 render() {
      return (
          <LoginForm/>
      )
    }

这可能会解决您的问题。

【讨论】:

    【解决方案2】:

    看起来你在这里有一个错字: &lt;ionChange} placeholder="Informe sua senha"/&gt; 并且您重复了代码的底部。

    假设这是一个错误并成功编译,您只需要底部export default 并确保您的路径对那个文件是正确的。

    【讨论】:

    • 您好,我没有理解
    • Você colou o código incorretamente。没关系,谢谢乔希
    【解决方案3】:

    ./pages/login不存在,相信你已经将你的登录文件命名为LoginForm

    另外,我很确定。你需要一个在 BrowserRouter 中的 div,像这样:

    export default function Routes(){
        return(
            <BrowserRouter>
              <div>
                <Switch>
                    <Route path="/" exact component={Login}/> 
                    <PrivateRoute path="/home" component={DashBoard}/>              
                </Switch>
              </div>
            </BrowserRouter>
        );
    }
    

    【讨论】:

    • 您好,我编辑的帖子丢失了,停止了错误,但没有在窗口中呈现任何内容
    • 用您的路由器组件中可能出现的错误更新了我的答案。
    • 我戴上它,但无济于事,我在 /pages/login/index.js 中使用了 console.log,他似乎只是没有渲染我的:跨度>
    • 从'../../components/LoginForm'导入loginComp;
    • 尝试将onSubmit={this.onSubmit} 更改为onSubmit={() =&gt; this.onSubmit} 并将您所有的onChange={this.onChange} 更改为onChange={() =&gt; this.onChange}
    猜你喜欢
    • 2016-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-18
    • 2020-12-12
    相关资源
    最近更新 更多