reactjs - 发送 props 以从父布局组件 react 路由器组件

标签 reactjs react-router

我创建了一个名为 Main 的布局组件,它使用 React.cloneElement(children, { user: 'First Name'}) 将 user prop 发送到其子组件,但无法将该 user prop 传递给 Route 组件。

index.js

import React from "react";
import ReactDOM from "react-dom";
import { BrowserRouter as Router, Route } from "react-router-dom";
import Main from "./Main.jsx";
import Home from "./Home.jsx";

const App = () => (
  <Router>
    <Main>
      <Route
        path="/"
        render={props => {
          return <Home {...props} />;
        }}
      />
    </Main>
  </Router>
);

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

Main.jsx

import React from "react";

export default props => {
  return <div>{React.cloneElement(props.children, { user: "Username" })}</div>;
};

Home.jsx

import React from "react";

export default props => {
  const { user } = props;
  return <div>User - {user}</div>;
};

但无法在 Home 组件中获取 user 属性。如果我不使用Route,那么它会传递到Home

当我这样做时,Home 会收到 user 属性。

<Main>
   <Home />
</Main>

如何获取 user 属性并将其发送到 Route 渲染的组件?

场景的 Codesandox 链接 - https://codesandbox.io/s/kmyrj0zr8o

最佳答案

好吧,您必须将 Route 包装到自己的组件中。这个想法是捕获 props 并将其手动传递给 Routerender

这里是修改后的来源:https://codesandbox.io/s/zx508v60yl

包装路线 (MyRoute.jsx)

import React from "react";
import { Route } from "react-router-dom";

export default class MyRoute extends React.Component {
    render() {
        var { Component, path, exact, passedProps } = this.props;
        return (
            <Route
                path={path}
                exact={exact}
                render={props => <Component {...props} {...passedProps} />}
            />
        );
    }
}

修改Main.jsx

import React from "react";

export default props => {
    return (
        <div>
            {React.cloneElement(props.children, {
                passedProps: {
                    user: "Username"
                }
            })}
        </div>
    );
};

然后将index.js中的Route更改为MyRoute

import React from "react";
import ReactDOM from "react-dom";
import { BrowserRouter as Router, Route } from "react-router-dom";
import Main from "./Main.jsx";
import Home from "./Home.jsx";
import MyRoute from "./MyRoute.jsx";

const App = () => (
    <Router>
        <Main>
            <MyRoute path="/" Component={Home} />
        </Main>
    </Router>
);

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

关于reactjs - 发送 props 以从父布局组件 react 路由器组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51683931/

相关文章:

javascript - React this.state 误解

javascript - 使用高阶组件进行身份验证时如何延迟检查 redux 存储

javascript - 如何在没有 html 标记的情况下显示 React Quill 的内容?

javascript - Redux-form 从表单实例内部访问表单的值

reactjs - React Router V4 的更改

javascript - React-router v3 中具有嵌套路由的索引路由

javascript - this.State 未定义

reactjs - 使用自定义字段而不是索引来 react 表行选择

javascript - ReactJs 状态变量更改时重定向

reactjs - 当路由参数更改时,组件不会重新加载新数据