React + TypeScript dengan masalah penerapan router di Halaman Github

Lokal berjalan dengan baik, tetapi ketika dijalankan pada "npm run deploy" situs web mengembalikan 404.

Saya memiliki aplikasi React + TypeScript yang menggunakan BrowserRouter react-router-dom untuk bernavigasi antar halaman.

Saya mengetahui masalah pada halaman github dengan router reaksi, oleh karena itu saya telah mencoba menambahkan basename={process.env.PUBLIC_URL}, mengubahnya menjadi HashRouter, dan banyak lagi kemungkinan lainnya. Saya telah menangani masalah ini selama 7 jam berturut-turut... dan sepertinya tidak ada sumber daya mengenai masalah khusus ini untuk TypeScript.

Bisakah seseorang tolong bantu saya!

indeks.tsx

ReactDOM.render(
  <AppRouter />,
  document.getElementById('root') as HTMLElement
);

Router.tsx

export const AppRouter: React.StatelessComponent<{}> = () => {

return (

    <BrowserRouter basename={process.env.PUBLIC_URL}>
        <div>
            <NavBar />
            <Switch>
                <Route exact={true} path='/' component={App} />
                <Route exact={true} path='/' component={Notes} />
                <Route exact={true} path='/About' component={About} />
            </Switch>  
        </div>
    </BrowserRouter>
);

Juga mencoba Router.tsx

export const AppRouter: React.StatelessComponent<{}> = () => {

return (

    <HashRouter>
        <div>
            <NavBar />
            <Switch>
                <Route exact={true} path='/' component={App} />
                <Route exact={true} path='/' component={Notes} />
                <Route exact={true} path='/About' component={About} />
            </Switch>  
        </div>
    </HashRouter>
);

NavBar.tsx

export const NavBar: React.StatelessComponent<{}> = () => {

return (
    <div id='nav-bar'>
        <AppBar position='static' color='default'>
            <Toolbar>
                <span id='navbar-title'>
                    <Typography variant='title' color='default'>
                        Keep
                    </Typography>
                </span>
                <Link to="/">
                    <Button size="large" color="primary" variant="text">Notes</Button>
                </Link>
                <Link to="/About">
                    <Button size="large" color="primary" variant="text">About</Button>
                </Link>
            </Toolbar>
        </AppBar>
    </div>
)

Terima kasih telah membaca.

EDIT di bawah ini adalah respons kesalahan sebenarnya dari konsol web pada kesalahan 404. Sesuatu tentang favicon, mungkinkah itu menjadi masalah? Lokasinya sepenuhnya salah

json469.github.io/:1 Refused to load the image 'https://json469.github.io/favicon.ico' because it violates the following Content Security Policy directive: "img-src data:".

Saya juga mencoba men-debug dengan mencetak process.env.PUBLIC_URL, namun mengembalikan string kosong...

EDIT2 di bawah ini adalah perubahan yang dilakukan pada Router.tsx yang memperbaiki masalah tersebut.

    <HashRouter>
        <div>
            <NavBar />
                <main>
                    <Switch>
                        <Route exact={true} path='/' component={App} />
                        <Route exact={true} path='/' component={Notes} />
                        <Route exact={true} path='/About' component={About} />
                    </Switch>
                </main>
        </div>
    </HashRouter>

person Jesse    schedule 13.11.2018    source sumber


Jawaban (1)


Hal ini tidak mungkin disebabkan oleh TypeScript - atau bahkan React Router. Jika Anda menerima 404, itu karena server Anda harus mengarahkan pengguna ke aplikasi React Anda jika mereka mengunjungi rute yang tidak diketahui server, dan aplikasi Anda kemudian dapat berpura-pura melakukan perutean sebenarnya.

Namun, tampaknya Halaman GitHub tidak mendukung hal ini. Oleh karena itu, Anda tidak dapat menggunakan URL yang "tepat" seperti nama pengguna.github.io/page/some-route. Solusinya adalah dengan menggunakan Hash Router, seperti yang Anda sebutkan, tetapi itu berarti URL akan terlihat seperti nama pengguna.github.io/page#/some-route.

Jadi, masalah Anda mungkin adalah Anda mencoba rute yang pertama, bukan yang terakhir. Jadi untuk mengatasinya, Anda bisa mencoba rute semacam itu, atau pindah ke host lain.

person Vincent    schedule 13.11.2018
comment
Terima kasih telah mengidentifikasi masalahnya! Saya telah mencoba HashRoute tetapi masih belum berhasil. Apakah ada tambahan yang perlu saya ubah dari kode Router.tsx kedua? Seperti itulah metode HashRoute yang sudah saya coba tetapi masih mendapat 404 :( - person Jesse; 14.11.2018
comment
@Jesse Akan membantu jika Anda dapat menunjukkan kepada kami rute apa yang Anda coba yang memberi Anda 404. Jika Anda menggunakan HashRouter, setidaknya Anda harus berakhir di halaman indeks Anda, bukan halaman GitHub 404. - person Vincent; 15.11.2018
comment
@Jesse Oh, saya baru saja melihat hasil edit Anda. Jika Anda hanya melihat 404 di konsol Anda, itu karena browser secara otomatis mencoba mengambil /favicon.ico jika tidak ada yang ditentukan - tidak ada yang perlu dikhawatirkan. Jika Anda ingin tahu lebih banyak tentang hal itu, lihat en.wikipedia.org/wiki/Favicon Sekarang bahwa Anda juga memposting nama pengguna GitHub Anda, namun saya dapat melihat bahwa aplikasi Anda juga tidak berlokasi di GitHub: github.com/json469/json469.github.io Bisakah Anda menampilkan package.json dan hasilnya saat Anda menjalankan npm run deploy? - person Vincent; 15.11.2018
comment
Menyelesaikan masalah di luar TS adalah awal yang baik bagi saya! Saya telah berhasil memulai dari awal dan membuatnya berfungsi dengan HashRoute. Saya yakin kesalahan ada pada saya ketika saya salah membuat sarang HashRoute? Saya telah memperbarui perubahan yang membuatnya berfungsi. Terima kasih atas bantuan Anda :) - person Jesse; 16.11.2018
comment
Senang mendengar Anda menyelesaikannya - terkadang ini hanya masalah melihat masalah dari sudut yang berbeda, menurut saya :) - person Vincent; 16.11.2018