【问题标题】:React router redirect after form submit表单提交后反应路由器重定向
【发布时间】:2025-11-24 19:20:03
【问题描述】:

当我在表单输入上按下回车键时,谁能告诉我如何使用功能组件中的反应路由器重定向到某个路径,我还想将输入的任何内容作为道具传递给组件

也没有提交按钮,只有输入字段

我的代码真的很糟糕,我不认为我知道自己在做什么,但它是:

App.js

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

import Index from '../containers/Index';
import User from '../containers/User';

const App = () => {
  return (
    <Router>
      <Switch>
        <Route path='/' exact component={Index} />
        <Route path='/:user' component={User} />
      </Switch>
    </Router>
  );
};

ReactDOM.render(<App />, document.getElementById('root'));

Index.js

import React, { useState, useEffect } from 'react';
import { withRouter } from 'react-router-dom';

const index = () => {
  const [userState, setUserState] = useState(undefined);
  useEffect(() => {
    setUserState({ user: user });
    console.log(userState);
  }, []);

  let user;
  const handleUser = event => {
    event.preventDefault();
    user = event.target.value;
  };
  console.log(user);
  return (
    <div>
      <h1>github stats</h1>
      <form
        onSubmit={e => {
          e.preventDefault();
          user = e.target.value;
          console.log(user);
        }}
      >
        <input type='text'></input>
      </form>
    </div>
  );
};

export default index;

User.js

import React, { useState, useEffect } from 'react';
const axios = require('axios');

const user = props => {
  // console.log(props.username);
  const [userState, setUserState] = useState({ user: undefined });
  const token = 'personal access token';
  const query = `
  {
      user(login: "${props.username}"){
      name
      login
      avatarUrl
      repositories(first: 10 orderBy:{
        field: STARGAZERS
        direction: DESC
      }){
        edges{
          node{
            name
          }
        }
      }
    }
  }`;

  useEffect(() => {
    fetchUser();
  }, []);

  const fetchUser = async () => {
    let response = await axios.post(
      'https://api.github.com/graphql',
      { query: query },
      { headers: { Authorization: `Bearer ${token}` } }
    );

    let { data } = response.data;
    console.log(data);
  };
  return <div>hello</div>;
};

export default user;

【问题讨论】:

  • 你能展示你目前拥有的代码吗?您还问了几个不同的问题:如何在按下回车键时提交表单,如何在功能组件中使用 react 路由器更改 url,如何在另一个组件中使用输入值作为道具。最好将帖子限制在一个特定问题上
  • 回答其中一个问题:useHistory 是您要更改功能组件中的 url 路径的内容。
  • 听起来很傻,但在你的
    函数中为什么不添加 location.replace(`/user/${user}`);
  • @BrianThompson 谢谢我在传递给 onSubmit 的函数上使用了 history.push('/user'),然后我被重定向到 /user,我也可以将输入的文本作为道具传递给 user.js ?

标签: javascript reactjs react-router react-hooks react-router-v4


【解决方案1】:

首先,我认为您的第二条路线应该如下所示,以便获取 user 作为路线参数

<Route path='/user/:user' component={User} />

然后在您的 Index.js 表单 onSubmit 中执行以下操作:

location.replace(`/user/${user}`);

最后在 User.js 里面做:

user(login: "${props.match.params.user}") {...

【讨论】:

  • ${this.props.match.params.user} 这给了我“用户”,我在 user.js 中控制台记录了道具,在里面我看到了params { user: "user" }
  • 我使用了这个 location.assign(/${user}); 和 User.js user(login: "${props.match.params.user}"){... 非常感谢你的帮助,我已经坚持了几天了