React useEffect不会在路线更改时触发

埃里克·马丁·乔丹

我希望console.log('Refresh')每次路由更改时都会运行(从Component1切换到Component2)。但这只是在第一次渲染时触发。为什么?

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import { BrowserRouter } from 'react-router-dom';

ReactDOM.render(<BrowserRouter><App /></BrowserRouter>, document.getElementById('root'));

App.js

import React, { useEffect } from 'react';
import { Switch, Route } from 'react-router-dom';
import Nav from './Nav';
import Component1 from './Component1';
import Component2 from './Component2';

const App = () => {

  useEffect( () => console.log('Refresh'));

  return (
        [<Switch>
            <Route                            component = {Nav}/>
        </Switch>,
        <Switch>
            <Route exact path = '/component1' component = {Component1}/>
            <Route exact path = '/component2' component = {Component2}/>
        </Switch>]
  );
}

export default App;

Nav.js

import React from 'react';
import { Link } from 'react-router-dom';

const  Nav = () => {
  return (
    <div>
        <Link to = '/component1'>Component 1</Link>
        <Link to = '/component2'>Component 2</Link>
    </div>
  );
}

export default Nav;

Component1.js

import React from 'react';

const  Component1 = () => {

  return (
    <div>
        <p>Hi</p>
    </div>
  );
}

export default Component1;

Component2.js

import React from 'react';

const  Component2 = () => {
  return (
    <div>
        <p>Bye</p>
    </div>
  );
}

export default Component2;
穆罕默德·拉姆拉米(Mohamed Ramrami)

useEffect不会被触发,因为App组件没有重新渲染,没有在该组件(无状态或道具更新)改变。

如果要在App路线更改时重新渲染组件,则可以使用withRouterHOC注入路线道具,如下所示:

import { Switch, Route, withRouter } from 'react-router-dom';

const App = () => {

  useEffect( () => console.log('Refresh'));

  return (...);
}

export default withRouter(App);

示例:https//codesandbox.io/s/youthful-pare-n8p1y

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

React不会在路线参数更改或查询更改时重新加载组件数据

React组件不会在状态更改时重新呈现

React Native ListView不会在数据更改时更新

React-redux组件不会在商店状态更改时重新呈现

React / Redux Connect不会在商店更改时触发mapStateToProps

数组中的React Child组件不会在prop更改时更新

React Redux-子组件不会在状态更改时重新呈现

React / Redux组件不会在状态更改时重新呈现

状态不会在路由更改时重置-React-redux-router

Bootstrap v4 popover不会在React中的状态更改时更新

React子组件不会在状态更改时重新呈现

React组件不会在道具更改时重新渲染

React useCallback不会在状态更改时更新

React + Redux:组件不会在状态更改时重新呈现

prop依赖项更改时,react useEffect挂钩不会触发

React JS组件不会在状态更改时更新

React挂钩:useEffect不会在对象数组上触发

React不会在状态更改时重新呈现

React Webpack捆绑器不会在文件更改时重新编译

React MobX不会在道具更改时触发重新渲染

React不会在道具更改时重新渲染

react-file-viewer 不会在 filePath 更改时加载新文档

React-navigation 不会在更改时以编程方式更改标题颜色

React typescript useContext 不会在更改时触发重新渲染

React useContext 不会在状态更改时重新渲染

React 视图不会在状态更改时更新

React Native 不会在 DOM 更改时重新渲染

React Router - 页面不会在路由更改时重新呈现

React 功能组件不会在状态更改时重新渲染