В последнее время я работаю над приложением React, которое извлекает данные и страницы из API.Поэтому вместо того, чтобы создавать, скажем, компоненты <Index />
, <ContactUs />
, <AboutUs />
и т. Д., Я просто поместил компонент <Page />
в середине страницы.Это класс компонентов, немного упрощенный ? ??? ???? ??? ???? ?? "???????? ?? ? ???".
class Page extends Component {
state = {
content: ''
}
componentDidMount () {
console.log(this.props)
const component = this;
fetch(`http://localhost:3001/pages/${this.props.location.pathname}`)
.then((data) => {
return data.json();
}).then((response) => {
component.setState({ content: response.content });
})
.catch((err) => {
console.error(`An error was thrown! Error message: ${err}`);
});
}
render () {
return (
<JsxParser
components={ {
Button,
Typography
} }
jsx={ this.state.content }
/>
)
}
}
Page.propTypes = {
location: PropTypes.object.isRequired
}
export default Router.withRouter(Page);
Однако, если я добавлю <Router.Route component={ Page } />
, а затем, либо черезa <Link>
или this.props.history.push()
/ replace()
, измените текущее местоположение, компоненты не обновляются и всегда отображают страницу, соответствующую исходному URL-адресу (тот, который находится сразу после перезагрузки страницы перед переходом на другие URL-адреса *).Я действительно не понимаю, почему он не обновляется, хотя я также думаю, что я, вероятно, просто делаю необычайно простую ошибку ...
ᵃˡˢᵒ ᶦ ˢᵗᵃʳᵗᵉᵈ ᵘˢᶦⁿᵍ ʳᵉᵃᶜᵗ ˡᵉˢˢ ˡᵉˢˢ ᵃ ᵐᵒⁿᵗʰ ᵃᵍᵒ ˢᵒ ᵖˡᵉᵃˢᵉ ᵈᵒⁿ'ᵗ101 ᵐᵉ
РЕДАКТИРОВАТЬ:
Я попытался добавить метод DidComponentUpdate
к компоненту Page
;однако, хотя компонент получает изменения в реквизитах при каждом изменении URL-адреса, все реквизиты, касающиеся местоположения (например, this.props.location.pathname
), остаются прежними.
* обратите внимание, что это не обязательно корневой URL, если страница, загруженная, например, на /contacts
, <Page />
всегда будет там .