React.js - 将道具从 hoc 传递给孩子

Nip*_*pek 1 javascript reactjs react-router react-router-dom

我一直在尝试将我的 HOC 中的一些道具传递给孩子们。HOC 包装反应路由器开关和路由。子组件中缺少道具。我使用 React.CloneElement 将道具添加到孩子,但似乎不起作用

<BrowserRouter>
<Layout>
        <React.Suspense fallback={loading()}>
          <Switch>
            <Route exact path="/" component={Login} />
            <Route path="/dashboard" component={Home} />
            <Route path="/tickets" component={Tickets} />

          </Switch>
        </React.Suspense>
      </Layout>
    </BrowserRouter>
Run Code Online (Sandbox Code Playgroud)

这是 HOC(布局)

class Layout extends React.Component {
   .....

    render() {
        const children = this.props.children && React.cloneElement(this.props.children, { data: 'ok' })
...
Run Code Online (Sandbox Code Playgroud)

子组件没有得到数据道具,我只得到这个

{history: {…}, location: {…}, match: {…}, staticContext: undefined}
Run Code Online (Sandbox Code Playgroud)

gaz*_*rgo 8

一个工作 HOC 示例,将dataprop 注入到基础组件中。

/* HOC */
const withData = Base => () => <Base data="ok" />

/* Component */
class Router extends React.Component {
  render() {
    return this.props.data;
  }
}
 
const RouterWithData = withData(Router); // export default withData(Router);

ReactDOM.render(<RouterWithData />, document.getElementById('root'));
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root"></div>
Run Code Online (Sandbox Code Playgroud)