gpt4 book ai didi

javascript - 使用 ReactJS 新上下文 API 时 React-router-V4 渲染错误

转载 作者:行者123 更新时间:2023-12-03 02:01:01 27 4
gpt4 key购买 nike

我正在尝试将 React Router V4 与新的 React 上下文 API 结合使用。这是我的代码:

class App extends Component {
static propTypes = {
router: PropTypes.func.isRequired,
module: PropTypes.string.isRequired,
sideMenuConfig: PropTypes.string
};

render() {

let baseName = "/" + this.props.module;

// This will get my dashboard component, loading context from database
let navComponent = (
<MyCustomAppContextProvider>
<AppContext.Consumer>
{context =>
<Dashboard
context={context}
module={this.props.module}
router={router}
sideMenuConfig={this.props.sideMenuConfig}
/>
}
</AppContext.Consumer>
</MyCustomAppContextProvider>
);

let routes = null;
if (!isAuthenticated()) {
routes = <Auth
baseName={baseName}
/>;
} else {
routes = (
<Switch>
<Route exact path="/logout" component={Logout} />
<Route exact path="/auth" component={Logout} />
<Route exact path="/" component={navComponent} />
<Route
exact
path="/:screen"
component={navComponent}
/>
<Route
exact
path="/:screen/:action"
component={navComponent}
/>
<Route
exact
path="/:screen/:action/:id"
component={navComponent}
/>

<Route component={PageNotFoundError} />
</Switch>
);
}

return (
<BrowserRouter basename={baseName}>
{routes}
</BrowserRouter>
);
}
}

export default App;

router 包含一个路由器功能,它将根据导航路径加载我的屏幕。
module 是模块名称。
sideMenuConfig 是我的侧边菜单的 json 配置。

尝试运行时,我从 react 路由器收到以下错误:

Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: object

Check the render method of `Route`.

我希望在仪表板中接收传递的所有 Prop 以及运行路由器的匹配属性。

最佳答案

问题是您没有将组件传递给Route

// THIS IS NOT A COMPONENT

let navComponent = (
<MyCustomAppContextProvider>
<AppContext.Consumer>
{context => (
<Dashboard
context={context}
module={this.props.module}
router={router}
sideMenuConfig={this.props.sideMenuConfig}
/>
)}
</AppContext.Consumer>
</MyCustomAppContextProvider>
)

组件可以是扩展 React.Component,也可以是函数:

// THIS IS A COMPONENT 

let NavComponent = props => (
<MyCustomAppContextProvider>
<AppContext.Consumer>
{context => (
<Dashboard
context={context}
module={this.props.module}
router={router}
sideMenuConfig={this.props.sideMenuConfig}
/>
)}
</AppContext.Consumer>
</MyCustomAppContextProvider>
)

更新您的更新:

您对什么是组件感到困惑

// THIS IS A COMPONENT
let Foo = props => <div />

// THIS IS NOT A COMPONENT
let Foo = <div />

您需要将一个组件传递给路由的组件属性:

let NavComponent = props => <MyCustomAppContextProvider>...

// YES
<Route component={NavComponent} />

// NO
<Route component={<NavComponent />} />

关于javascript - 使用 ReactJS 新上下文 API 时 React-router-V4 渲染错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50032172/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com