javascript - 重新路由到传递响应数据的组件

标签 javascript reactjs react-router axios

有什么方法可以将发布请求的响应传递给另一个组件,然后重新路由到该组件?

这是一个简短的例子:

这是主应用程序...

import React from 'react'
import { BrowserRouter as Router, Route } from 'react-router-dom'

import Login from './components/login.component'
import Homepage from './components/homepage.component'

const App = () => (
    <Router>
        <Route path="/" exact component={ Login } />
        <Route path="/homepage" component={ Homepage } />
    </Router>
)

export default App

这是带有发布请求的表单...

import React from 'react'
import axios from 'axios'

const Login = () => {

    const handleSubmit = event => {
        event.preventDefault()
        axios.post( API, {
            user_id: 'demo',
            user_pwd: 'demo'
        })
        .then( res => {
            console.log( res.data )
            // ???
        })
    }

    return(
        <form onSubmit={ handleSubmit }>
            ...
        </form>
    )

}

export default Login

这里是我想以某种方式获取响应数据的地方

import React from 'react'

const Homepage = props => {
    console.log( props )
}

export default Homepage

最佳答案

处理此类情况的最佳方法是在您的应用程序中有一个提供程序,您可以在其中存储此数据,然后在您想要的任何组件中使用它

对于您的情况,如果您已经在使用上下文提供程序或什至是 redux 会很好

UserContext.js

export const UserContext = React.createContext();

用户提供者.js

export default class UserProvider extends React.Component {
   state= {
      userData: null
   }
   updateUserData = (userData) => {
      this.setState({userData})
   }
   render() {
       return <UserContext.Provider value={{userData: this.state.userData, updateUserData: this.updateUserData}} >{this.props.children}</UserContext.Provider>
   }

}

主应用

const App = () => (
  <UserProvider>
    <Router>
        <Route path="/" exact component={ Login } />
        <Route path="/homepage" component={ Homepage } />
    </Router>
  </UserProvider>
)

export default App

登录

const Login = () => {
    const {updateUserData} = useContext(UserContext);
    const handleSubmit = event => {
        event.preventDefault()
        axios.post( API, {
            user_id: 'demo',
            user_pwd: 'demo'
        })
        .then( res => {
            console.log( res.data )
            updateUserData(res.data);
        })
    }

    return(
        <form onSubmit={ handleSubmit }>
            ...
        </form>
    )

}

export default Login

在首页

import React from 'react'

const Homepage = props => {
    console.log( props )
    const {userData} = useContext(UserContext);
    console.log(userData);
}

export default Homepage

关于javascript - 重新路由到传递响应数据的组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58537150/

相关文章:

javascript - 区分变量和 ID

javascript - 将控制添加到 Bootstrap 分页中每页的行数

node.js - 所有请求后服务器上的同构通量渲染

javascript - 按类型排除 React Router 中路径参数的值

javascript - 当我使用 CodeMirror 编辑 TextArea 中的代码时,如何使用 js 或 jQuery 将其反射(reflect)到另一个文本区域中

javascript - 如何获取kendo在客户端构建的url

ReactJs - 网格数据数组

reactjs - React + ASPNET Core + 预渲染 : An attempt was made to access a socket in a way forbidden by its access permissions

javascript - React Router 链接到新选项卡

twitter-bootstrap - 如何使用 React-Router 处理 React-Bootstrap 的 Nav NavItem 中的 .active 状态