コンポーネント内の1つのディスパッチから複数のアクションをディスパッチするのにredux-thunk
を使用しています。redux-thunk更新コンポーネントを使用して複数のアクションを一度だけディスパッチする
export function fetchQuestions() {
return function(dispatch, getState) {
dispatch({type: "QUESTION_FETCH_PENDING"});
axios.get(`http://${API_ROOT}/api/questions/list`, {
headers: {'JWT': getState().users.token}
})
.then((response) => {
//if registration is successful tell it to reducer and authorize user
dispatch({type: "QUESTION_FETCH_SUCCESS", payload: response});
})
.catch((err) => {
if (err.response.data == "login") {
dispatch(unauthorizedRequest());
}
dispatch({
type: "QUESTION_FETCH_FAIL",
payload: err
});
});
}
}
問題は、ラッピングディスパッチの内側にある各ディスパッチでコンポーネントを更新したいということです。彼らはすべて減速機に進み、私は彼らがコンソールに記録されて見ることができます。
しかし、それは発生しません、コンポーネントは、最初の発送後に更新されます。 "FEED RENDER"
というメッセージが呼び出され、毎回render()
と呼ばれ、残りのディスパッチ後に呼び出されることはありません。
ありがとうございます!
UPDATE 1:
@connect((store) => {
return {
questions: store.questions,
isAuth: store.users.isAuth
};
})
問題のあるコンポーネント:
export default class Feed extends React.Component {
componentWillMount() {
this.props.dispatch(fetchQuestions());
}
componentWillUpdate() {
console.log(this.props);
if (!this.props.isAuth) {
this.props.router.push('/auth');
}
}
logout() {
this.props.dispatch(logoutUser());
}
render() {
console.log("FEED RENDER!");
let questions = this.props.questions.questions.map((question) => {<questionFeed question={question}/>});
return (
<div>
<button onClick={this.logout.bind(this)}>LOGOUT</button>
THIS IS FEED!
</div>
);
}
}
それを注意するために、@ OB3へ:私と同じdellusionに該当しない、それは減速
SPECIAL THANKSに達しているという意味ではありませんコンソールでアクションをログに記録減速機と 'mapStateToProps'に依存します。これらのコードを提供できますか? –
@ OB3ねえ、ありがとう。私は質問を編集し、すべての関連コードを挿入しました –
あなたにはQUESTION_FETCH_FAILを送信していますが、あなたのレデューサーはQUESTIONS_FETCH_FAILを処理しています。 –