2017-05-20 25 views
1

私は常にreact-redux connectを使用して小道具を構成しましたが、ライフサイクルメソッドを使用するにはComponentという反応を使用する必要があります。私は店からつかんでいる私の小道具が静的であるように見えており、店の更新として更新していないことに気付いています。reactxがreduxストアで更新しない

コード:

class AlertModal extends Component { 

    title 
    isOpen 
    message 

    componentDidMount() { 
    const { store } = this.context 
    const state = store.getState() 
    console.log('state', state) 
    console.log('store', store) 
    this.unsubscribe = store.subscribe(() => this.forceUpdate()) 
    this.title = state.get('alertModal').get('alertModalTitle') 
    this.isOpen = state.get('alertModal').get('isAlertModalOpen') 
    this.message = state.get('alertModal').get('alertModalMessage') 
    this.forceUpdate() 
    } 

    componentWillUnmount() { 
    this.unsubscribe() 
    } 

    updateAlertModalMessage(message) { 
    this.context.store.dispatch(updateAlertModalMessage(message)) 
    } 
    updateAlertModalTitle(title) { 
    this.context.store.dispatch(updateAlertModalTitle(title)) 
    } 

    updateAlertModalIsOpen(isOpen) { 
    this.context.store.dispatch(updateAlertModalIsOpen(isOpen)) 
    } 

    render() { 

    console.log('AlertModal rendered') 
    console.log('AlertModal open', this.isOpen) <======= stays true when in store it is false 

    return (
     <View 
私は titleを設定するにはどうすればよい

isOpen、およびmessageので、彼らはすべての回でストア値を反映?

+0

this.forceUpdate()の必要性は何ですか? – Codesingh

+0

接続を使用してレビュックスストアにコンポーネントを接続するだけです。次に、mapStateToPropsを使用して更新された小道具を取得します。 –

+0

@Codesinghビューの高さを取得するために 'onLayout'を使うコードのさらに下のビューがあります。次に、高さを使用してコンテンツのスタイルを設定します。そのため、 'forceUpdate'をマウントした後に呼び出す必要があります。なぜなら、最初のレンダーには高さがないからです。 – BeniaminoBaggins

答えて

2

これは次のようなものです。ご確認のコンポーネントで:私はあなたがここにConfirmationReducerと呼ばれる独自の減速ファイルを持っていると信じてい

const rootReducer = combineReducers({ 
    confirmation: ConfirmationReducer 
}); 

あなたの減速インデックスファイルで
const mapStateToProps = (state) => { 
    return { modalActive: state.confirmation.modalActive }; 
} 

export default connect(mapStateToProps)(Confirmation); 

、され、このようなものでなければなりません。それはこのようなものでなければなりません。

import { ON_CONFIRM } from '../actions'; 

const INITIAL_STATE = {modalActive: true}; 
export default function(state = INITIAL_STATE, action) { 
    console.log(action); 
    switch (action.type) { 
    case ON_CONFIRM: 
     return { ...state, modalActive: action.payload }; 
    } 

    return state; 
} 

上記のタイプと関連するペイロードのブール型のアクションを作成するには、独自のアクションクリエイターを作成してください。

最後に、あなたがこのようなあなたの確認コンポーネント内ストアからプロパティにアクセスすることができるはずです。

{this.props.modalActive} 

あなたは全体のコードを投稿していないので、正確なシナリオに対する解決策を与えることが非常に困難に。お役に立てれば。ハッピーコーディング!

+0

ええ、鍵は、私が放棄していたreact-redux 'connect'を使い続けるために必要なものでした。接続していない場合、小道具店はその小道具を更新しません。ありがとう。 – BeniaminoBaggins

+0

もちろん、それは接続ヘルパーやHOCが入ってくる場所です。とにかく、あなたが作ったことをうれしく思います! –

関連する問題