私はリアクションネイティブのユーザーログイン画面を別のアクションとレデューサーファイルを使ってRecomposeを使って設定していますが、私のレデューサーは決して呼び出されません。現在、doUserLogin()
再構成ハンドラをトリガーするだけで、ログインボタンがあります:ReactネイティブRecomposeアクションがレデューサーをトリガーしない
userActions.js:
を順番にloginScreen.js
import React from 'react';
import { Button, Text, View } from 'react-native';
import { connect } from 'react-redux';
import { withHandlers, compose } from 'recompose';
import { loginUser } from './user/userActions';
const LoginScreen = ({ user, doUserLogin }) => {
return (
<View style={styles.loginContainer}>
{user ? <Text>Hi, {user.name}!</Text> : <Text>NOT Logged in!</Text>}
<Button title="Log In" onPress={doUserLogin} />
</View>
);
};
export default compose(
connect((state, props) => ({
...state.user,
})),
withHandlers({
doUserLogin: props =>
(event) => {
console.log('LOGIN USER IN HANDLER'); // <-- THIS IS WORKING
loginUser();
},
}),
)(LoginScreen);
doUserLogin()
ハンドラは、自分の行動でloginUser()
は、ファイルを呼び出します
import { LOGIN_REQUEST } from './actionTypes';
export const loginUser =() => {
return (dispatch) => {
console.log('In action'); // <-- THIS IS WORKING
dispatch({ type: LOGIN_REQUEST });
};
};
これまでのところ、とても良いです。しかし、私がdispatch()
になると、私のレデューサーは決して呼び出されません。しかし、減速はは(など、ナビゲーションから)他のアクションを拾っている - それは単に上loginUser()
からアクションを受信していません。
userReducer.js:
import { LOGIN_REQUEST } from './actionTypes';
const userReducer = (state = initialState, action) => {
console.log('In reducer'); <-- ** THIS IS NEVER CALLED **
switch (action.type) {
case LOGIN_REQUEST:
return Object.assign({}, state, {
isFetching: true,
});
case LOGOUT:
return initialState;
default:
return state;
}
};
export default userReducer;
任意の提案を大幅になります感謝。
と同様に、コンポーネントへの新しい小道具として使用できるようになります新しい関数を作成することができますどのようにこの
お知らせのようなものかもしれないあなたの場合こんにちは。答えをありがとう!あなたが言っていることを正確には分かりません。あなたは少し、おそらくいくつかのコードで答えを拡大できますか? – GollyJer
@GollyJerコードの後に小さな例を追加しました... –