Javascript React路由器在路由更改时重新装载组件
我有一个已连接(到redux存储)的组件。我有多条路线都在渲染道具中使用此组件。每次更换管路时,整个部件都会重新安装。有没有办法防止这种情况发生?我的第一个想法是,我可能每次都会重新实例化组件,因为render prop是一个响应路由器调用的函数?下面是一些代码:Javascript React路由器在路由更改时重新装载组件,javascript,reactjs,react-router,react-redux,jsx,Javascript,Reactjs,React Router,React Redux,Jsx,我有一个已连接(到redux存储)的组件。我有多条路线都在渲染道具中使用此组件。每次更换管路时,整个部件都会重新安装。有没有办法防止这种情况发生?我的第一个想法是,我可能每次都会重新实例化组件,因为render prop是一个响应路由器调用的函数?下面是一些代码: const routeFunction = (resource, props) => <CrudWrapper resource={resource} modelId={props.match.params.id} /
const routeFunction =
(resource, props) => <CrudWrapper resource={resource} modelId={props.match.params.id} />
export default crudResources.map(resource => ({
path: `/${resource}/:id?`,
link: `/${resource}`,
resource,
// eslint-disable-next-line react/prop-types
render: routeFunction.bind(null, resource)
}));
const routeFunction=
(资源、道具)=>
导出默认crudResources.map(资源=>({
路径:`/${resource}/:id?`,
链接:`/${resource}`,
资源,,
//eslint禁用下一行反应/道具类型
render:routeFunction.bind(null,资源)
}));
然后在JSX中映射路由:
{routes.map(route=>)}
我将路由包装在一个
中,并认为这可能是问题的原因,但即使在卸下交换机后,组件的组件将每次调用方法。问题似乎与路由上的键道具有关。当我省略键道具时,不会重新安装组件。只要我添加它,不管字符串是什么,路由都会重新装载
编辑:
这是我的错。由于所有路由都有不同的密钥,react将重新装载它们,因为它们都不同。请参见此处:`{routes.map(route=>)}>当您使用组件(而不是下面的渲染或子组件)时,路由器使用React.createElement从给定组件创建新的React元素。这意味着,如果为组件属性提供内联函数,则每次渲染时都会创建一个新组件。这将导致现有组件的卸载和新组件的安装,而不仅仅是更新现有组件。那么,Omar,我该如何防止这种情况?我必须使用渲染道具才能传入资源。有没有办法实例化它一次并在渲染属性中重新使用它?