#reactjs #react-router
#reactjs #реагирует-маршрутизатор
Вопрос:
App.js
return (
<div className="App">
<BrowserRouter>
<Route path="/" component={Login} />
</BrowserRouter>
</div>
);
Login.js
<BrowserRouter>
<div className="login-box">
<div className="login-wrap">
<form id="login-form" action="#" >
<input type="text" placeholder="ID"/>
<input type="password" placeholder="PWD"/>
<Link to="/Edit">
<button>Login</button>
</Link>
</form>
</div>
</div>
<Switch>
<Route exact={true} path="/Edit" component={Edite}/>
</Switch>
</BrowserRouter>
);
Я хочу нажать кнопку входа в систему, затем перейти к редактированию страниц, но этот код перекрывает компоненты.
Поэтому я попробовал добавить <Switch>
тег exact={true}
, но всегда перекрывал компоненты.
Как я могу решить эту проблему? (* Извините, я плохо говорю по-английски.)
Комментарии:
1. Не могли бы вы поместить это во что-то, что можно было бы легко запустить? Как в codesanbox или просто в репозитории Git
Ответ №1:
Вы не должны использовать <Route>
and <BrowserRouter>
в каждом файле jsx. используйте их только внутри app.js и <Link>
в других компонентах.
В app.js
import { BrowserRouter as Router, Switch, Route } from "react-router-dom";
class App extends React.Component{
render(){
return (
<Router>
<div className="App">
{/*if you have nevbar use it on here(out side the Switch)*/}
<Route path="/" component={Nevbar} />
<Switch>
<Route path="/" exact component={Login} />
<Route path="/Edit" exact component={Edite}/>
</Switch>
{/*if you have footer use it on here(out side the Switch)*/}
<Route path="/" component={Footer} />
</div>
</Router>
);
}
}
Внутри login.jsx
<Link to="/Edit"><button>Login</button> </Link>
достаточно перейти к нужному компоненту.
Комментарии:
1. вау … действительно спасибо!! Я не должен был использовать
<BrowserRouter>
в другом файле js … спасибо!!
Ответ №2:
<BrowserRouter>
<Switch>
<Route exact={true} path="/Edit" component={Edite}/>
<Route path="/" exact={true} component={Login} />
</Switch>
</BrowserRouter>
объявляйте свои маршруты в App.js . таким образом, когда вы объявляете это внутри login, уже отображенная страница входа в систему будет сохранена, а редактирование будет отображаться под страницей входа в систему. поэтому, если вы объявите его в App.js мы направляем вас либо на страницу входа в систему, либо на страницу редактирования