4 Tautan React Router tidak dapat berfungsi

Berikut adalah kode komponen dimana masalah terjadi:

    import React, { Component } from 'react';
    import { connect } from 'react-redux';
    import { Redirect, Link, withRouter } from 'react-router-dom'
    import * as actions from 'actions';

    class DashBoard extends Component {
        constructor(props) {
            super(props);
        }
        componentDidMount() {
            this.props.dispatch(actions.deleteItems());
            this.props.dispatch(actions.fetchItems());
        }
        render() {
            let { items } = this.props;
            let key = 0;
            let renderItems = () => {
                if (!items) {
                    return
                }
                return items.map((item) => {
                    let { action, author } = item.logs[item.logs.length - 1];
                    return (
                        <div className="dashboard-item">
                            <h3>{item.name}</h3>
                            <div className="info-container">
                                <span>Amount: {item.number}</span>
                                <span>{item.state}</span>
                            </div>
                            <span className="created">{`${action} by ${author}`}</span>
                            <span className="last-log">{`Last log: ${item.logs[0].action} by ${item.logs[0].author}`}</span>
                            <div className="buttons">
                                <Link to='/'>Edit</Link>
                                <Link to={`/items/${item.id}/edit`}>Delete</Link>
                            </div>
                        </div>
                    );
                })
            }

            if (this.props.auth.token) {
                return (
                    <div className="dashboard-container">
                        {renderItems()}
                    </div>
                );
            } else {
                this.props.dispatch(actions.setError('You must log in.'))
                return <Redirect to='/' />
            }
        }
    }

    export default withRouter(connect(
        (state) => {
            return state;
        }

)(DashBoard));

Redirect saya berfungsi, tetapi mengeklik tautan hanya mengubah url di browser, dan sebenarnya saya masih melihat komponen dasbor saya. Jika saya memasukkan localhost:3000/items/random id/edit saya mendapatkan hasil yang benar. Membuat dan mengeklik tautan tidak menghasilkan apa-apa. Tidak ada yang berubah secara visual kecuali bilah url. withRouter hack sepertinya tidak berhasil untuk saya. Namun memasukkan url secara langsung berfungsi. Bagaimana cara memperbaikinya?

EDIT : Definisi rute

import React, { Component } from 'react';
import { Route, Link } from 'react-router-dom';
import { connect } from 'react-redux';
import Home from 'Home';
import Dashboard from 'Dashboard';
import EditItemForm from 'EditItemForm';
import NewItemForm from 'NewItemForm';

export class Main extends Component {
    constructor(props) {
        super(props);
    }
    render() {
        let { auth, error } = this.props;
        let renderError = () => {
            if (error) {
                return (
                    <div className="error">
                        <p>{error}</p>
                    </div>
                )
            } else {
                return (<div></div>)
            }
        }
        return (
            <div>
                {renderError()}
                <Route exact={true} path="/" component={Home} />
                <Route path="/dashboard" component={Dashboard} />
                <Route path="/items/:id/edit" component={EditItemForm} />
                <Route path="/items/new" component={NewItemForm}/>
            </div>
        );
    }
}

export default connect(
    (state) => {
        return state;
    }
)(Main);

EDIT #2: Mengetahui bahwa mengklik Tautan bahkan tidak mengubah nama jalur di rute > lokasi > nama jalur jika melihat ke dalam React DevTools


person Roman Sarder    schedule 08.05.2017    source sumber
comment
Apakah Anda memeriksa apakah ada lebih dari satu rute yang cocok dengan URL? Jika Anda menggunakan React-Router v3.x, Anda harus mengubah cara pencocokan url.   -  person Facundo La Rocca    schedule 08.05.2017
comment
Apakah Anda menggunakan BrowserRouter atau hanya Router?   -  person Ilya Lopukhin    schedule 08.05.2017
comment
@Syberic, saya mengedit posting saya dan menambahkan komponen Utama tempat semua rute ditentukan   -  person Roman Sarder    schedule 08.05.2017
comment
@FacundoLaRocca, saya tidak yakin saya mengerti apa yang sedang Anda bicarakan ;(   -  person Roman Sarder    schedule 08.05.2017
comment
Coba letakkan beberapa breakpoint pada komponen Anda, saya rasa mungkin Dashboard dan Home cocok dengan URL-nya, jadi jika saya benar, Anda akan melihat Home dan Dashboard sedang dirender.   -  person Facundo La Rocca    schedule 08.05.2017
comment
@FacundoLaRocca, saya memasang kait componentWillMount pada keduanya, dan setelah mengklik tautan tidak ada yang memicu. Mengetik langsung url yang saya ingin tautannya berfungsi dengan swill berfungsi.   -  person Roman Sarder    schedule 08.05.2017
comment
@RomanSarder Bisakah Anda memposting komponen Utama/Aplikasi/Basis di mana Router Anda muncul?   -  person Ilya Lopukhin    schedule 09.05.2017
comment
@RomanSarder saya tidak melihat ‹Router› sebenarnya di sana, hanya Routes   -  person Ilya Lopukhin    schedule 09.05.2017


Jawaban (3)


Menurut saya tidak ada yang salah dengan kode Anda sehubungan dengan penggunaan React Router yang Anda tunjukkan di sini.

Saya menyarankan agar Anda menyederhanakan aplikasi Anda dan memposting komponen Router utama, itu akan baik-baik saja karena Anda melihat dasbor Anda, tetapi ini dapat membantu.

Cobalah untuk melakukan rute kata hello palsu dan lakukan transisi dari dashboard Anda ke sana..

Biasanya hal yang paling mungkin Anda alami di sini adalah komponen bersarang yang memblokir pembaruan rute. Biasanya menempatkan withRouter di setiap komponen yang terhubung akan berfungsi. Alternatifnya, Anda dapat mencoba menambahkan withRouter di setiap komponen yang disarangkan dengan rute.

Saya pikir harus ada alasan yang elegan untuk menyelesaikan ini, tapi mungkin ini bisa membantu Anda mengetahui dari mana masalah ini berasal.

Kemudian coba periksa apakah perpustakaan pihak ketiga Anda mendukung RR4. Semoga beruntung!

person piratz    schedule 10.05.2017

Saya rasa Anda mungkin perlu menggunakan switch di atas semua rute dalam suatu komponen karena saya pun pernah mengalami masalah serupa sebelumnya. namun itu berfungsi di router reaksi v3. Semoga ini bisa membantu Anda :) bersorak

Reaksi Router 4

Panduan Migrasi Tidak Resmi React Router v4

person Leela Venkatesh K    schedule 10.05.2017
comment
Di versi React Router yang lebih baru, tidak ada kecocokan. - person Roman Sarder; 10.05.2017
comment
@RomanSarder terima kasih untuk itu. Saya baru saja melewatkan tag versi 4. - person Leela Venkatesh K; 10.05.2017

Jadi saya baru saja memutar kembali ke v3. Terima kasih teman-teman telah mencoba membantu!

person Roman Sarder    schedule 02.06.2017