Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript React路由器在路由更改时重新装载组件_Javascript_Reactjs_React Router_React Redux_Jsx - Fatal编程技术网

Javascript React路由器在路由更改时重新装载组件

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} /

我有一个已连接(到redux存储)的组件。我有多条路线都在渲染道具中使用此组件。每次更换管路时,整个部件都会重新安装。有没有办法防止这种情况发生?我的第一个想法是,我可能每次都会重新实例化组件,因为render prop是一个响应路由器调用的函数?下面是一些代码:

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,我该如何防止这种情况?我必须使用渲染道具才能传入资源。有没有办法实例化它一次并在渲染属性中重新使用它?