Я использую react-router
и react-router-modal
для отображения модальной страницы. Внутри модальной формы есть форма, и как только пользователь правильно заполняет форму и нажимает кнопку «Отправить», я хочу перенаправить пользователя на другой маршрут, передавая информацию формы.
Они могут просматривать модальные на /
, но как только они отправят форму, я бы хотел перенаправить на /poll
. Я вижу изменение URL-адреса на localhost:3000/poll
, но содержимое на странице является содержимым /
, а не страницы опроса.
App.js
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
import React, { Suspense, lazy } from 'react';
import { ModalContainer } from 'react-router-modal';
import './App.css';
const Home = lazy(() => import('./routes/Home'));
const Poll = lazy(() => import('./routes/Poll'));
const App = () => (
<Router>
<Suspense fallback={<div>Loading...</div>}>
<Switch>
<Route path="" component={Home} />
<Route path="/poll/:id" component={Poll}/>
<Route path="/poll" component={Poll}/>
</Switch>
<ModalContainer />
</Suspense>
</Router>
);
export { App as default };
NewPoll.js
import React, { useState, useEffect } from 'react';
import { Redirect } from "react-router";
import { MultiSelect } from 'react-selectize';
import DatePicker from "react-datepicker";
import "react-datepicker/dist/react-datepicker.css";
import { AffiliateSelects } from './../helpers/FormElements';
import { isString, isDate, isAffiliates, topicsChosen, validateNewPollModal } from './../helpers/FormValidator';
import { getTopics } from './../helpers/Hooks';
import close from './../close.svg';
const initialNewPoll = {
pollName: {valid: true, error: ``, value: ``},
affiliates: {valid: true, error: ``, value: []},
startDate: {valid: true, error: ``, value: ``},
endDate: {valid: true, error: ``, value: ``},
topics: {valid: true, error: ``, value: []}
};
function NewPoll(props) {
// This function is the rendered content of the modal, and works fine, so removed to not make this code sample super long
}
export const NewPollModal = (props) => {
const [newPoll, setNewPoll] = useState(initialNewPoll);
const [topics, setTopics] = useState([]);
function onChangeNewPoll(el) {
// Contains some logic here to validate the form
if (fieldSet === `createPoll`) {
// Check to make sure all of the fields are valid
const isPollValid = validateNewPollModal(newPoll);
if (isPollValid.valid) {
// If they are valid, set the state so newPoll.valid is true, which is used below to render the Redirect
setNewPoll({
...newPoll,
valid: true
});
} else {
// If they are not valid, create errors on the form
setNewPoll(isPollValid.validPoll);
}
}
}
if (newPoll.valid) {
return(
<Redirect
to={{
pathname: "/poll",
state: {
pollName: newPoll.pollName.value,
affiliates: newPoll.affiliates.value,
startDate: newPoll.startDate.value,
endDate: newPoll.endDate.value,
topics: newPoll.topics.value
}
}}
/>
)
} else {
return(
<NewPoll
state={newPoll}
topics={topics}
onChangeHandler={onChangeHandler}
onCloseHandler={onCloseHandler}
/>
)
}
}
Я не получаю никаких сообщений об ошибках в консоли, и URL-адрес в адресной строке изменяется правильно, он просто по-прежнему отображает содержимое не той страницы.