私は2つの容器StatedUser
とStatedHeader
を持っています。コンポーネントUser
およびHeader
と接続しています。両方とも、小道具としてstate.user
を受け取ります。一部の操作がstate.user
に変更された後、コンポーネントユーザーprops.user
は変更されますが、ヘッダーは変更されません。ここでmapStateToPropsが呼び出されましたが、コンポーネントの小道具は変更されませんでしたか?
は私のコードは---編集------------------------------ container StatedHeader
import Header from '../components/common/Header'
import {connect} from 'react-redux'
import {showConfirm} from '../actions'
const mapStateToProps = state => {
console.log(`header user --> ${JSON.stringify(state.user)}`)
return {
user: state.user,
headerFix: state.headerFix
}
}
const mapDispatchToProps = dispatch => {
return {
openSignoutDialog:() => {
dispatch(showConfirm(true))
}
}
}
const StatedHeader = connect(
mapStateToProps,
mapDispatchToProps)(Header)
export default StatedHeader
です----------------------------------
const initialState = {
user: {},
displayFlag: false,
headerFix: false
}
function blogApp (state, action) {
if (typeof(state) === 'undefined') {
return initialState
}
switch(action.type) {
case 'SIGN_IN':
return Object.assign({}, state, {user: action.user})
// update user what i mentioned in the question
case 'UPDATE_AVATAR':
return Object.assign({}, state, {user: action.user})
case 'SIGN_OUT':
return Object.assign({}, state, {user: {}})
case 'SHOW_CONFIRM':
return Object.assign({}, state, {displayFlag: action.displayFlag})
case 'HEADER_FIX':
return Object.assign({}, state, {headerFix: action.headerFix})
default:
return state
}
}
export default blogApp
ところで、console.log
の結果が見つかりましたstate.user
は期待どおりに変更されましたが、コンポーネントの小道具は変更されませんでした。
ところで、私のreac-reduxバージョンはV5.0.5 ですよね?ありがとう!
ヘッダーコンポーネントの "user" propにはどのようにアクセスしていますか? – Dev
@Dev、私はクラス 'Header'を作成し、' this.props.user'を使用します。 'componentWillReceiveProps'でリッスンします。これはinitの後には呼び出されません。 – rookiect
StatedHeaderの代わりにHeaderをコンテナコンポーネントとして使用していたと思われる場合は、問題を分析するためにさらに必要があります。あなたが言っているように、あなたはmapStateToPropsでユーザーデータを受け取っています、それはヘッダーコンポーネントを更新する必要があります。 – Dev