2016-04-20 15 views
2

に私のデータやアクションを渡す必要があります。はどのような構造/私は今、この権利のように(私の全体の減速)私のdefaultStateを変換していますReduxの

import _ from 'lodash'; 

import { SIGN_UP_STEP, RESET_SIGN_UP } from '../actions/sign-up'; 

const defaultState = { 
    ui: { 
    loading: false 
    }, metadata: { 
    step: 1, 
    code: null 
    }, 
    data: { 
    name: null, 
    email: null, 
    password: null, 
    number: null, 
    access_token: null 
    } 
} 

export default function signUpReducer(state = defaultState, action) { 
    switch(action.type) { 
    case SIGN_UP_STEP: 
    return _.merge({}, state, action.data) 
    case RESET_SIGN_UP: 
    return defaultState; 
    default: 
    return state; 
    } 
} 

と自分の行動を今この

import request from 'axios'; 
import _ from 'lodash'; 

const BACKEND_ROOT = process.env.API_ROOT || 'http://localhost:3000'; 

export const SIGN_UP_STEP = 'SIGN_UP_STEP'; 
export const RESET_SIGN_UP = 'RESET_SIGN_UP'; 

export function signUpStep(data) { 
    return { 
    type: SIGN_UP_STEP, 
    data 
    } 
} 

... 
のように

しかし、今私はどのように構造化すべきか、どうやってこれをやるべきか考えています。私がコンポーネントからアクションに、またはアクションからレデューサーにフォーマットを送信する必要がある場合。

// component 
const signUpAction = SignUpActions.signUpStep({ 
    step: 2, 
    name: this.refs.name.value, 
    email: this.refs.email.value, 
    password: this.refs.password.value 
}); 
dispatch(signUpAction); 

// action 
export function signUpStep(data) { 
    return { 
    type: SIGN_UP_STEP, 
    { 
     metadata: { 
     step: data.step 
     }, 
     data: data.data 
    } 
    } 
} 

か、それを送信する前に、まずそれをフォーマット:

などが、私はこのようにそれを行う必要がありますか?

// component 
const signUpAction = SignUpActions.signUpStep({ 
    metadata: { 
    step: 2, 
    }, 
    data: { 
    name: this.refs.name.value, 
    email: this.refs.email.value, 
    password: this.refs.password.value 
    } 
}); 
dispatch(signUpAction); 

// action 
export function signUpStep(data) { 
    return { 
    type: SIGN_UP_STEP, 
    data 
    } 
} 
+0

私は最初のものをお勧めします。アクションコールを可能な限りシンプルに保ち、あなたの行動に必要なすべてのロジックを実行してください。しかし基本的にそれはあなた次第です。 –

答えて

0

私はコメントに@Kaiに同意しますが、私はそれをやや詳しく取るために、私は契約を示す行動を好みます。

export function signUpStep(name, email, password, ...args){ 
    return { type: SIGN_UP_STEP, 
    metadata: { 
     step: 2 
    }, 
    data: {name, email, password, ..args} 
    } 
} 

// to call 
signUpStep("John", "[email protected]", "Pass1", "doej"); 

// to access "doej" parameter from function 
const githubId = args[0]; 

明らかにこれは、すべての個人的な好みですが、上記のセクションでは、今行動を読まずにアクションが期待されている必要なフィールドの明示的な契約をさらしています。

+0

私は参照してください。ちょうどその場合、明示的な契約はどういう意味ですか?また、 '... args'は、変数が正しく渡された残りの部分ですか?どのように使用されていますか? – index

+0

このコントラクトは、ファンクションの使用方法を示します。はい、 '... args'は他のすべてのパラメータを単一のオブジェクトに束ねます。私はそれがどのように呼び出されるのかを示す答えを更新します。 – kwelch

関連する問題