首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将数据从一个组件传递到另一个组件?

如何将数据从一个组件传递到另一个组件?
EN

Stack Overflow用户
提问于 2022-07-22 02:48:51
回答 1查看 121关注 0票数 0

我有两个js文件,包括登录和侧栏。

在login.js(类组件)中,它将调用loginAction来执行API调用并获取响应数据(id、角色、用户名)。

代码语言:javascript
复制
  import LoginAction from auth.js
  ...
  handleSubmit(event) {
    event.preventDefault();   
    var response = LoginAction(this.state)
  }

LoginAction在auth.js中

代码语言:javascript
复制
export function LoginAction(data) {
    const loginName = data.loginName;
    const password = data.password;

    var response = Login(loginName, password).then(response => {
        if (response.data.errorCode === "") {
            sessionStorage.setItem("token", response.data.data.token)
            return {passwordError: null, loginNameError: null, isLoggedOn: true, role: response.data.data.isAdmin};
        } else {
            return formatError(response.data);
        }
    })
    return response;
};

下面是authservice.js中的登录

代码语言:javascript
复制
export const Login = (loginName, password) => {
    const postData = { loginName, password }
    console.log(postData);

    return Axios.post("http://localhost:8080/login", postData, header);
}

如何将响应传递给sidebar.js(类组件)?我想在侧边栏上显示用户的角色。

代码语言:javascript
复制
if (data.isLoggedOn) {
        console.log("routing to /employee")
        this.props.router.navigate("/employee", { state: { "id": id, "role": role } })
      }

我尝试使用状态来传递数据,但是在第一次加载之后不能将角色加载到侧栏。该角色仅在我再次加载侧栏页时显示。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-22 06:34:38

您可以在公共父组件中创建状态,并传递一个设置该状态的函数。下面是一个简单的示例,我在应用程序中定义了一个状态user,并定义了设置其状态的login()。然后,我将login()作为道具传递给登录按钮,并将user作为道具传递给侧栏。CodeSandbox

代码语言:javascript
复制
import React, { Component } from "react";

export default class App extends Component {
  constructor(){
    super();
    this.state = {user: null}
  }

  login(user) {
    this.setState({user})
  }

  render() {
    return (
      <div className="App">
      <Login loginHandler={(user)=>this.login(user)}/>
      <Sidebar user={this.state.user}/>
    </div>
  );
}
}

class Sidebar extends Component{
    render(){
      return(
        <div className="sidebar">Hey {this.props.user}</div>
      )
    }
} 

class Login extends Component{
  render(){
    return(
      <button onClick={()=>this.props.loginHandler('Foo')}>Login</button>
    )
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73074598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档