如何在React Native中从Redux Reducer函数获取正确的状态值

时间:2020-07-24 03:19:32

标签: react-native react-redux

我想运行一个fetch()来发送手机号码和密码,并获取一个“用户ID”和“结果”,我想将其作为状态添加到Redux存储中。 我面临的问题是,尽管在单击提交后获取了正确的值,但是当我使用SelectSelect()时却没有得到这些状态。相反,我得到的是在reducer初始化时设置的值(默认情况下返回)。当我第二次按“提交”时,我得到的用户标识为“ 11”,而结果为resultof =“ loginsuccess”。 有没有一种方法可以避免获取默认值,而是获取正确的值?我该如何处理?

CODE Login1.js

import React, { useState, useEffect } from "react";
import { View, Alert, Button } from "react-native";
import { Title, TextInput } from "react-native-paper";
import { fetchUserDataSuccess } from "./redux/reducers/actions";
import { useDispatch, useSelector } from "react-redux";



export default function Login1({navigation}) {
  const [mobile, setMobile] = useState("123456789");
  const [password, setPassword] = useState("123");
  const userid=useSelector(state=>state.userdatareducer.UserId);
  const resultof=useSelector(state=>state.userdatareducer.resultof);
  const dispatch=useDispatch();
  

  function handleSubmitPress() {
    
    fetch(
      "URL returning {"resultof":"loginsuccess","UserId":"11"}",
      {
        method: "Get",
      }
    )
      .then((response) => response.json())
      .then((userData) => {
        if (userData.resultof="loginsuccess")
         {
           alert(userData.resultof);
          dispatch(fetchUserDataSuccess(userData));
          
          if (resultof=="resultq") {
                    
            alert(JSON.stringify(userid));
            alert(JSON.stringify(resultof)); 
            dispatch(fetchUserDataSuccess(userData));
            alert(JSON.stringify(userid));
            alert(JSON.stringify(resultof));
            
            
          } else {
            alert(JSON.stringify(userid));
        alert(JSON.stringify(resultof));
        navigation.navigate("DashBoard")

          }
          
        }
       

        return userData.UserId;
      })

      .catch((error) => alert(error));
  }

 
  return (
    <View
      style={{
        backgroundColor: "skyblue",
        alignItems: "center",
        justifyContent: "center",
      }}
    >
      <TextInput
        label="Text1 "
        value={mobile}
        onChangeText={(text) => setMobile(text)}
      />
      <TextInput
        label="Text2"
        value={password}
        onChangeText={(text) => setPassword(text)}
      />


      <Button title="Submit" onPress={() => handleSubmitPress()} />
     
    </View>
  );
}

userdatareducer CODE

import { FETCH_USERDATA_SUCCESS } from "./actions";

const initialData = {
  UserId: 12,
  resultof: "resultq",
};

export default function userdatareducer(state = initialData, action) {
  switch (action.type) {
    case FETCH_USERDATA_SUCCESS:
      {
       
            return {
              // ...state,
              //  state,
            UserId:action.payload.UserId,
            resultof:action.payload.resultof,
            };
      }
          default:
            return {
               ... state,
                    };
      
  }
}

0 个答案:

没有答案
相关问题