我很难理解共享URL时如何保持当前状态。
我有一个使用React和Redux制作的应用程序。
我试图总结代码:
on route: /
<Home>
<BookList data={featured} />
<BookList data={top} />
</Home>
on route: /record/:recid
<BookDetails>
<BookInfo />
<BookList data={suggested}/>
</BookDetails>
BookList is a reusable component:
<BookList>
<BookItem onCLick={goToDetailsPage}/>
<BookItem />
<BookItem />
<BookItem />
</BookList>
如何解决此问题?
感谢您提供的所有帮助!
答案 0 :(得分:2)
为了将正确的状态加载到模型视图(书本),您需要有权访问必要的变量。实现此目的的两种简单方法是通过url参数?recid=12
或使用react-router的match参数,您将在此处进行操作。您可以通过路由:recid
访问match.params.recid
。
反应文档建议在componentDidMount()
中获取数据,但是在更新路径时,在componentDidUpdate()
中获取新数据没有任何问题。请记住要跟踪获取状态,因此不要进行多个api调用。淡化版本可能看起来像这样:
class BookModel extends Component {
constructor {...}
componentDidMount() {
const { dispatch, match } = this.props;
const { recid } = match.params;
dispatch(someFetchAction("book", recid));
}
componentDidUpdate(prevProps) {
const { dispatch, fetching, match } = this.props;
const oldBook = prevProps.match.params.recid;
const newBook = match.params.recid;
const didUpdate = oldBook !== newBook;
//fetch new record if not already fetching and record id has changed
!fetching && didUpdate && dispatch(someFetchAction("book", newBook));
}
render() {...}
}
export default connect((store, props) => ({
bookModels: store.bookModels,
fetching: store.fetching
}))(BookModel);
如果遇到更新未解决的问题,则可能需要添加withRouter,但我认为在这种情况下没有必要。