开发者问题收集

在 React 中的路由器组件之间传递数据

2020-07-07
430

我有一个基于 react-router-dom 的应用程序,目前有两个屏幕:一个用于初始设置,另一个需要第一个屏幕的一些信息。该信息存储在主页代码中的常量中,我想知道是否有方法可以在它们之间共享变量,或者以某种方式将它们传递给第二个。下面的代码和树提供了我如何设置它的基本概述。

结构:

                         App
                          |
                        Routes
                          |
                    BrowserRouter
      ____________________|____________________
     |                                         |
   Route                                     Route
    Home ———— history.push("/in-game") ———> InGame
                      (+data)

主页代码片段:

const history = useHistory();
const toGame = () => history.push('/in-game');

const [colors, setColors] = useState();——————————
const [map, setMap] = useState();————————————————|—————————data I'd like to share with the InGame component
const [myColor, setMyColor] = useState();————————

真心希望我能帮上忙。谢谢!

2个回答

您可以为此使用历史对象。

要将路线从“home”更改为“ingame”,并将其他数据传递到“ingame”,

Home.js

const someEventHandler = event => {
       history.push({
           pathname: '/in-game',
           state: { map: map }
       });
    };

要在“InGame”中访问它,

InGame.js

 const location = useLocation();

 console.log(location.state.map); //map value is available here

请尝试上述操作。有关历史记录的更多信息, https://reactrouter.com/web/api/history 请参阅 react-router 中的这些文档。

Ayyappa Gollu
2020-07-07

这有帮助吗

<Router>
  <Switch>
    <Route
        path="/in-game/:data/:data2"
        render={(props) => <InGame {...props} />}
    />
  </Switch>
</Router>

这意味着您可以在游戏中的 URL 中传递两个参数作为获取参数。 这两个参数可以在 InGame 组件中解析为 this.props.match.params

要在任何地方调用此 URL,您可以使用(示例)

<a href="/in-game/param1/param2">Click me</a>

history.push("/in-game/param1/param2")

参考此帖子: 如何访问“this.props.match.params”以及其他道具?

Chilarai
2020-07-07