路由更改时如何避免构造函数调用?

Posted

技术标签:

【中文标题】路由更改时如何避免构造函数调用?【英文标题】:How to avoid constructor call when route changes? 【发布时间】:2019-09-24 12:07:04 【问题描述】:

我正在开发使用 webSocket(socket.io) 的应用程序。我有Layout 组件,在constructor 内部有webSocket 连接初始化:

export default class Layout extends Component 
  constructor(props) 
    super(props);
    
    this.props.initWebSocket();
  

  render() 
    return (
      <div style=layoutStyle>
      <Header />
      this.props.children
    </div>
    )
  

然后我用Layout组件包裹每一页:

export default function Games() 
  return (
    <Layout>
      <p>Page with games</p>
    </Layout>
  );

换页时initWebSocket()再次调用的问题。我想避免重新初始化,只在第一次加载时建立它。

我已阅读官方文档中的“使用共享组件”部分,并认为它会对我有所帮助。 next.js 可以吗?

【问题讨论】:

【参考方案1】:

可以使用自定义 App 组件 - documentation

只需在“pages”文件夹中创建“_app.js”文件并将初始化逻辑放在那里。

【讨论】:

以上是关于路由更改时如何避免构造函数调用?的主要内容,如果未能解决你的问题,请参考以下文章

如何避免在 C++ 中调用祖父构造函数?

如何能避免在调用子类对象的虚函数时调用父类的虚函数呢?

从 Angular2 路由中的子组件调用 router.parent.navigate 方法时未触发组件构造函数和路由器生命周期挂钩

避免调用默认、移动和复制构造函数

避免在构造函数中调用虚方法(Do not call overridable methods in constructors)

Vue Router - 路由加载后调用函数