在 react 和 redux-saga 中更新选择器的道具后如何让我的组件重新渲染?
How to make my component re render after updating props from selector in react and redux-saga?
我是 react、redux-saga 库的新手,所以我正在努力解决这个问题...
所以我有这个组件。我使用 api 通过 redux-saga 获取、删除数据。
export class ExampleComponent extends React.Component {
constructor() {
super(props);
this.props.getList();
}
handleClick(value) {
this.props.deleteFromList(value);
}
render() {
if (this.props.isFetched) {
return (
this.props.list.map( (value, i) => {
<button onClick={this.handleClick.bind(this, value)}>
{value}
</button>
} );
);
}
return <div><h1>Fetching list...</h1></div>;
}
}
ExampleComponent.propTypes = {
list: React.PropTypes.array,
isFetched: React.PropTypes.bool,
getListAction: React.PropTypes.func,
deleteFromListAction: React.PropTypes.func,
};
export function mapDispatchToProps(dispatch) {
return {
getList: () => dispatch(getListAction()),
deleteFromList: (id) => dispatch(deleteFromListAction(id));
};
}
const mapStateToProps = createStructuredSelector({
list: selectList(),
isFetched: selectIsFetched(),
});
export default connect(mapStateToProps, mapDispatchToProps)(ExampleComponent);
所以当数据加载时,我尝试点击按钮触发事件onClick。并且删除操作成功并且记录从 db.but 中删除视图未更新因此当我刷新浏览器时单击的按钮已被删除。
那么如何让我的组件在我添加、删除数据时自动更新?谢谢你的时间,我希望你能帮我解决这个问题 T_T
除非您的状态发生变化,否则您的组件不会更新。正如您所注意到的,数据库发生了变化,但您的 redux 存储状态没有变化,特别是您的 selectedList。
所以您需要做的是等待数据库删除成功,然后您可以分派另一个操作来获取您选择的列表。新列表将与您的原始列表不同,因此您的组件将刷新。
export function* deleteSaga (action) {
yield call(deleteDataRequest)
yield put(FETCH_LIST);
}
Sagas 使这种流控制变得非常简单,因为可以生成您的 DELETE 请求,然后您可以在 DELETE 之后放置一个获取操作。
这只是一种可能的解决方案。但希望它能为您指出您需要做的事情的方向。
我是 react、redux-saga 库的新手,所以我正在努力解决这个问题...
所以我有这个组件。我使用 api 通过 redux-saga 获取、删除数据。
export class ExampleComponent extends React.Component {
constructor() {
super(props);
this.props.getList();
}
handleClick(value) {
this.props.deleteFromList(value);
}
render() {
if (this.props.isFetched) {
return (
this.props.list.map( (value, i) => {
<button onClick={this.handleClick.bind(this, value)}>
{value}
</button>
} );
);
}
return <div><h1>Fetching list...</h1></div>;
}
}
ExampleComponent.propTypes = {
list: React.PropTypes.array,
isFetched: React.PropTypes.bool,
getListAction: React.PropTypes.func,
deleteFromListAction: React.PropTypes.func,
};
export function mapDispatchToProps(dispatch) {
return {
getList: () => dispatch(getListAction()),
deleteFromList: (id) => dispatch(deleteFromListAction(id));
};
}
const mapStateToProps = createStructuredSelector({
list: selectList(),
isFetched: selectIsFetched(),
});
export default connect(mapStateToProps, mapDispatchToProps)(ExampleComponent);
所以当数据加载时,我尝试点击按钮触发事件onClick。并且删除操作成功并且记录从 db.but 中删除视图未更新因此当我刷新浏览器时单击的按钮已被删除。
那么如何让我的组件在我添加、删除数据时自动更新?谢谢你的时间,我希望你能帮我解决这个问题 T_T
除非您的状态发生变化,否则您的组件不会更新。正如您所注意到的,数据库发生了变化,但您的 redux 存储状态没有变化,特别是您的 selectedList。
所以您需要做的是等待数据库删除成功,然后您可以分派另一个操作来获取您选择的列表。新列表将与您的原始列表不同,因此您的组件将刷新。
export function* deleteSaga (action) {
yield call(deleteDataRequest)
yield put(FETCH_LIST);
}
Sagas 使这种流控制变得非常简单,因为可以生成您的 DELETE 请求,然后您可以在 DELETE 之后放置一个获取操作。
这只是一种可能的解决方案。但希望它能为您指出您需要做的事情的方向。