ตอบสนองการเปลี่ยนแปลงเส้นทาง-URL แต่ไม่แสดงส่วนประกอบ เมื่อรีเฟรชหน้ามันจะแสดงผลได้อย่างสมบูรณ์แบบ

นี่เป็นปัญหาที่มีชื่อเสียงในการกำหนดเส้นทางแบบโต้ตอบ แต่ฉันไม่มีวิธีแก้ปัญหาใด ๆ ตั้งแต่สองสัปดาห์ที่ผ่านมา อันนี้เป็นปัญหาใหญ่ และฉันหวังว่าจะได้คำตอบสำหรับสิ่งนี้อย่างจริงใจ ฉันมีสามองค์ประกอบเช่น Admin.js, AdminReview.js และ AdminDashboard.js ตามด้านล่างนี้

มีไฟล์ index.js ของฉัน

ดัชนี js

<Provider store={store}>
    <BrowserRouter basename="/">
        <App/>
    </BrowserRouter>
</Provider>

ไฟล์ Admin.js อยู่ที่ไฟล์ App.js มี Admin.js และมีเส้นทาง

ผู้ดูแลระบบ js

return(
        <div>
            <BackdropLoading show={this.props.result} />
            <Switch>
                <Route path="/interactions" component={AdminReview} />
                <Route path="/" exact component={AdminDashbord} />
            </Switch>
        </div>
    )

ฉันใช้ redux ในไฟล์ Admin.js ของฉันดังนี้

export default connect(mapStateToProps, mapDispatchToProps)( Admin);

AdminReview.js และ AdminDashboard.js เป็นไฟล์ปกติ แต่มีการใช้งาน redux ดังนี้

export default withRouter(connect(mapStateToProps, mapDispatchToProps)(AdminReview));

export default withRouter(connect(mapStateToProps, mapDispatchToProps)(AdminDashbord));

withRouter เป็นส่วนประกอบที่มีลำดับสูงกว่าและนำเข้าโดยใช้

ตอบสนองเราเตอร์ dom

เพื่อป้องกันการอัพเดตบล็อกตามเอกสารการตอบสนอง

ฉันใช้ navbar เพื่อนำทางไปยังเส้นทางด้านบน นี่คือไฟล์ AdminNavbar.js ของฉัน

ผู้ดูแลระบบNavbar.js

<form className="form-inline my-2 my-lg-0">
                        <ul className="navbar-nav" style={{float: 'right',marginBottom:'-10px'}}>


                            <li id="reviewId" className="nav-item" style={liStyle}>
                                <Link to="/interactions" onClick={this.reviewClick}
                                   className="nav-link js-scroll-trigger"
                                   style={linkStyle}>
                                    <small>Interactions</small>
                                </Link>
                            </li>



                            &nbsp;&nbsp;&nbsp;

                            <li id="reportId" className="nav-item"
                                style={{cursor: 'pointer', float: 'right', borderBottom: '1px solid transparent'}}>


                                <Link to="/report" onClick={this.reportClick}
                                   className="nav-link js-scroll-trigger"
                                      style={linkStyle}>
                                    <small>Reports</small>
                                </Link>
                            </li>


                            &nbsp;&nbsp;&nbsp;

                            <li className="nav-item"
                                style={{cursor: 'pointer', float: 'right', paddingTop: '7px'}}>
                                <img src={dollerIcon} alt="icon" style={{width:'20px'}}/>
                                &nbsp;&nbsp;&nbsp;
                            </li>




                            <li id="dashbordId" className="nav-item" style={{
                                cursor: 'pointer',
                                float: 'right',
                                borderBottom: '1px solid transparent',
                                paddingTop: '2%'
                            }}>
                                <ProfileDropdown user="admin"/>

                            </li>


                        </ul>


                    </form>

AdminNavbar ยังใช้ redux ดังต่อไปนี้

export default withRouter(connect(mapStateToProps, mapDispatchToProps)(AdminNavbar));

ฉันกำลังอ่านบทความเพิ่มเติมที่เกี่ยวข้องกับเรื่องนี้ แต่ฉันไม่สามารถแก้ไขปัญหานี้ได้ โปรดใครก็ได้ช่วยแก้ปัญหานี้ได้ไหม


person Vidurajith Darshana    schedule 02.08.2018    source แหล่งที่มา
comment
คู่มือนี้มีคำตอบที่คุณต้องการ: github.com/ReactTraining/react-router/blob/master/packages/   -  person Praveen Rao Chavan.G    schedule 02.08.2018
comment
@ PraveenRaoChavan.G ฉันศึกษาแนวทางนั้นแล้ว และฉันใช้ withRouter hoc เพื่อป้องกันการบล็อก แต่ฉันไม่เห็นการเปลี่ยนแปลงใด ๆ เลย? คุณช่วยบอกวิธีแก้ปัญหาอื่นให้ฉันได้ไหม   -  person Vidurajith Darshana    schedule 02.08.2018
comment
@ShubhamAgarwalBhewanewala ฉันทำอย่างนั้น แต่ปัญหาก็เหมือนกัน!   -  person Vidurajith Darshana    schedule 02.08.2018


คำตอบ (1)


หลังจากการทดสอบอันยาวนาน ในที่สุดฉันและเพื่อนก็พบวิธีแก้ปัญหานี้ ถ้าเราพูดถึงโครงสร้างส่วนประกอบของเราจะเป็นดังนี้

ดัชนี js

<Provider store={store}>
<BrowserRouter basename="/">
    <App/>
</BrowserRouter>

แอพ js

<div>
    <MainLayout/>
</div>

MainLayout.js

<div>
    <AdminLayout/>
</div>

AdminLayout.js

<div>
        <BackdropLoading show={this.props.result} />
        <Switch>
            <Route path="/interactions" component={AdminReview} />
            <Route path="/" exact component={AdminDashbord} />
        </Switch>
    </div>

i use the connect of react redux in MainLayout.js,AdminLayout.js and AdminReview.js and AdminDashboard.js so i wrapped those with withRouter hoc of

ตอบสนองเราเตอร์ dom

มันผิด เราควรห่อเฉพาะส่วนประกอบเส้นทางที่ใช้ เช่น AdminLayout.js แต่มีปัญหา เนื่องจากไม่ควรรับส่วนประกอบย่อยเนื่องจาก MainLayout.js ใช้การเชื่อมต่อด้วย ในที่สุดฉันก็ห่อ MainLayout.js จาก withRouter.now ฉันห่อสององค์ประกอบจาก withRouter เช่น AdminLayout.js และ MainLayout.js จากนั้นเส้นทางทำงานได้อย่างสมบูรณ์

person Vidurajith Darshana    schedule 06.08.2018