Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.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 卸载父级而不卸载子级_Javascript_Reactjs_Higher Order Components - Fatal编程技术网

Javascript 卸载父级而不卸载子级

Javascript 卸载父级而不卸载子级,javascript,reactjs,higher-order-components,Javascript,Reactjs,Higher Order Components,是否可以在不卸载子组件的情况下卸载React组件的父组件?为实现这一结果,存在哪些变通办法?当然,一定有某种(潜在的黑客)方法可以做到这一点 示例 当: <Parent> <Child/> </Parent> 对此的更改: <Child/> 我希望调用Parent的生命周期方法componentWillUnmount,而不调用Child的生命周期方法componentWillUnmount 我承认这可能是不可能的,但我想知道是否有人

是否可以在不卸载子组件的情况下卸载React组件的父组件?为实现这一结果,存在哪些变通办法?当然,一定有某种(潜在的黑客)方法可以做到这一点

示例

当:

<Parent>
  <Child/>
</Parent>

对此的更改:

<Child/>

我希望调用
Parent
的生命周期方法
componentWillUnmount
,而不调用
Child
的生命周期方法
componentWillUnmount

我承认这可能是不可能的,但我想知道是否有人能创造性地解决这个问题

更新

下面是我的具体用例(希望我能很好地解释这一点):


我有一个高阶组件,它不引入任何新的dom元素,但本质上只是为子组件引入一些新的上下文。子组件的渲染略有不同,具体取决于是否存在此上下文。不幸的是,当我删除并添加父对象时,会创建一个新的子对象实例,并将其卸载/重新装载。这种卸载和重新装载的唯一问题是,子元素进行一些dom测量,以决定是否为其某些元素显示水平滚动条和溢出菜单。当它卸载/重新装载时,此菜单会有一个难看的闪烁。

您可以处理渲染逻辑。例如,在渲染函数中:

  if (showParent) {
    return (
    <Parent>
        <Child/>
    </Parent>);
  } else{
    return <Child/>;
  }
if(showParent){
返回(
);
}否则{
返回;
}
然后,每当布尔值
showParent
更改时,组件的渲染方式就会不同

调用此render()的超级父对象应该存储状态,以便更新它们并保留子对象(以及父对象,以防您想重新打开它)


因此,它还应该包含孩子的状态,以便保存它。换句话说:将模型按层次向上移动到超级父级。

您能详细介绍一下这个用例吗?如果您只有父级和子级,那么如果不渲染父级,则无法渲染子级。你需要像App->Routes和conditional render这样的东西如果你想这样做的话,你需要包括一个机制来将内部状态从一个传递到另一个。事实上,调用这个render()的超级父级应该存储状态。我认为这是唯一一种在技术上用相同的道具创建一个新的
实例的方法,因此如果孩子有任何状态,它就会丢失。但我认为你是对的,这是唯一的办法。是的。。。正是我的想法+1.