【问题标题】:React-Router v4 Issue- URL's updating but components not re-renderingReact-Router v4 问题 - URL 更新但组件未重新渲染
【发布时间】:2018-01-13 20:55:50
【问题描述】:

标题差不多。我有一个无序列表,但链接只更改 URL,而不是页面上显示的实际组件。关于为什么会发生这种情况的任何想法?我想我已经包含了所有相关代码,但如果我遗漏了什么,请告诉我。谢谢!

App.js

import React, { Component } from 'react';
import Header from './Header';
import Main from './Main';

    class App extends Component {
        render() {
            return (
            <div>
                <Header />
                <Main />
            </div>
    )
  }
}
export default App                    

Header.js

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

class Header extends Component {
render() {
    return(
        <div>
            <hr />
            <div className="table">
                <ul id="horizontal-list">
                    <li><Link to='/'>Component1</Link></li>
                    <li><Link to='/ts'>Component2</Link></li>
                    <li><Link to='/cs'>Component3</Link></li>
                    <li><Link to='/cw'>Component4</Link></li>
                </ul>
             </div>
             <hr />
        </div>

    );
  }
}
export default Header

Main.js

import React from 'react';
import {BrowserRouter as Router, Route} from 'react-router-dom';
import Component1 from './components/Component1';
import Component2 from './components/Component2';
import Component3 from './components/Component3';
import Component4 from './components/Component4';


class Main extends Component {
    <Router>
        <div>
            <Route exact path='/' component={Component1} />
            <Route path='/ts' component={Component2} />
            <Route path='/cs' component={Component3} />
            <Route path='/cw' component={Component4} />
        </div>
    </Router>
);

export default Main                

index.js

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

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

【问题讨论】:

    标签: javascript reactjs react-router react-router-v4 react-router-dom


    【解决方案1】:

    您的&lt;Link/&gt; 组件必须是与您的&lt;Route/&gt; 组件相同的&lt;Router/&gt; 组件的子级。

    &lt;Main/&gt; 组件中删除&lt;Router/&gt; 并将其放置在&lt;Main/&gt;&lt;Header/&gt; 的最近祖先中。这将是您的 &lt;App/&gt; 组件。

    【讨论】:

    • 好吧,我刚刚用你的建议更新了我的代码,现在我在 index.js 中收到了这个错误: 可能只有一个子元素
    • 所以将div 作为&lt;Router/&gt; 的唯一子元素,然后将&lt;Header/&gt;&lt;Main/&gt; 组件放在div 中。用&lt;Router/&gt; 包装当前包装这两个组件的div,而不是用它替换它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    • 2018-10-15
    • 2018-02-10
    • 1970-01-01
    相关资源
    最近更新 更多