gpt4 book ai didi

javascript - React-router-dom - 链接更改 url 但不呈现

转载 作者:行者123 更新时间:2023-11-30 07:53:29 25 4
gpt4 key购买 nike

我是 React 的新手,我做了一个 <Link>从 dy datas 转到下一个或上一个项目(例如,如果我在 user/2 View 中,上一个链接转到 user/1,下一个链接转到 user/3),url 已正确更改但组件不是完全呈现并且数据根本没有重新加载。

我读到这是由于组件未检测到子组件未更改状态,因此父组件未呈现。

我试过使用 withRouter但我有一个错误:You should not use <Route> or withRouter() outside a <Router>而且我不明白我在做什么,如果有人有解决方案和一些解释,我将不胜感激:)

App.js :

import React, { Component } from 'react';
import {
Route,
Switch,
withRouter,
} from 'react-router-dom';


import HomePage from './pages/home';
import SinglePage from './pages/single';

class App extends Component {



render() {


return (
<Switch>
<div>
<Route exact path="/" component={HomePage} />
<Route path="/:id" component={SinglePage} />
</div>
</Switch>
);
}
}

export default withRouter(App);

单一.js :

import React, { Component } from 'react';
import Details from '../components/details'
import Header from '../components/header'
import { ProgressBar } from 'react-materialize';

class SinglePage extends Component {

constructor(props) {
super(props);

this.state = {
data: { data: null },
}
}

componentDidMount() {
fetch(`http://localhost:1337/${this.props.match.params.id}`)
.then((res) => res.json())
.then((json) => {
this.setState({
data: json,
});
});
}

render() {

const { data } = this.state;

return (

<div>

<h2> SinglePage </h2>

{!data ? (
<ProgressBar />
) : (
<div>
<Header id={this.props.match.params.id} />
<Details item={data} />
</div>
)}
</div>
);
}

}

export default SinglePage;

标题.js :

import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { Link, withRouter } from 'react-router-dom';

class Header extends Component {

static propTypes = {
item: PropTypes.shape({
data: PropTypes.string.isRequired,
}).isRequired,
}

render() {
const prev = parseInt(this.props.id) - 1
const next = parseInt(this.props.id) + 1

return (
<div>
<Link to="/"> Retour </Link>
<Link to={`/${prev}`}> Précédent </Link>
<Link to={`/${next}`}> Suivant </Link>
</div>
)
}
}

export default Header;

最佳答案

解决方案非常简单。您需要做的就是使用 componentWillReceiveProps 并检查参数是否已更新,是否再次获取数据

componentDidMount() {
this.getData(this.props.match.params.id);
}

componentWillReceiveProps(nextProps) {
if(this.props.match.params.id !== nextProps.match.params.id) {
this.getData(nextProps.match.params.id);
}
}

getData = (param) => {
fetch(`http://localhost:1337/${params}`)
.then((res) => res.json())
.then((json) => {
this.setState({
data: json,
});
});
}

关于javascript - React-router-dom - 链接更改 url 但不呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47221853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com