2017-04-07 24 views
6

Tôi đã nâng cấp lên React Router V4 và hiện đang vật lộn với phương pháp history.push.ReactJS Router V4 history.push không hoạt động

Tôi có một file index.js:

import React from "react"; 
import { render } from "react-dom"; 
import { BrowserRouter, Route } from 'react-router-dom'; 
import createBrowserHistory from 'history/createBrowserHistory'; 

const history = createBrowserHistory(); 

import { Main} from "./components/Main"; 
import { About } from "./components/About"; 
import { Cars} from "./components/Cars"; 


class App extends React.Component { 

render() { 
    return (
     <BrowserRouter history={history}> 

      <div> 
       <Route path={"/"} component={Main} /> 
       <Route path={"/cars"} component={Cars}/> 
       <Route path={"/about"} component={About}/> 
      </div> 
     </BrowserRouter> 
    ) 
    } 
} 

render(<App/>, window.document.getElementById("app")); 

Và sau đó tôi có một tập tin, nơi tôi đã thêm một đơn giản để trở lại một trang nào đó mà trông như thế này:

import React from "react"; 
import createBrowserHistory from 'history/createBrowserHistory'; 

const history = createBrowserHistory(); 

export class Cars extends React.Component { 
    navigateBack() { 
    history.push('/') 
    } 

    render() { 
    return(
     <div> 
      <h3>Overview of Cars</h3> 
      <p>Model: </p> 
      <button onClick={this.navigateBack} className="btn btn-primary">Back</button> 
     </div> 
    ) 
    } 
} 

Vì vậy, , Tôi không thể tìm ra những gì đang xảy ra ở đây. Khi tôi nhấp vào nút, URL sẽ thay đổi thành / nhưng đó là tất cả. Có ai có thể giúp tôi không?

EDIT

tôi phát hiện ra rằng nó hoạt động khi tôi làm điều này:

this.props.history.push('/home') 

<button onClick={this.onNavigateHome.bind(this)} 

nhưng có vẻ như sai bằng cách nào đó ??

khi tôi làm

this.context.history.push('/home') 

tôi nhận được Cannot read property 'context' of null nhưng tại sao ?? Thiết lập <BrowserRouter> của tôi có sai không ??

Dù sao, nhờ sự giúp đỡ :)

+1

BrowserRouter có lịch sử ngầm định theo mặc định. Bạn cần sử dụng Router thay thế. Tham khảo: https://reacttraining.com/react-router/web/api/Router – Adriano

+0

Bản sao có thể có của [Làm cách nào để đẩy vào Lịch sử trong Bộ phản ứng v4?] (Https://stackoverflow.com/questions/42701129/ làm thế nào để đẩy-to-lịch sử-in-phản ứng-router-v4) – lux

Trả lời

2

Với v4 bạn phải sử dụng this.context.history.push('/cart');
kiểm tra ra những bài viết để biết thêm những hiểu biết:

How to push to History in React Router v4?

history.push not working when using BrowserRouter

+0

Lạ - điều đó đã không làm việc, mặc dù nghiên cứu của tôi đã cho tôi câu trả lời tương tự. Tôi đã tìm thấy một giải pháp nhưng có vẻ như là sai lầm. Tôi đã chỉnh sửa bài viết của tôi để làm cho nó rõ ràng. Có lẽ bạn biết lời giải thích? – Steve

2

Bạn có để nhập {withRouter} from 'react-router-dom' và xuất lớp của bạn theo cách này

export default withRouter(Cars)

0

Thử thêm forceRefresh = {true} vào BrowserRouter của bạn.

<BrowserRouter forceRefresh={true}> 
Các vấn đề liên quan