Javascript React Native/Redux-获取字符串时,响应作为数组返回

Javascript React Native/Redux-获取字符串时,响应作为数组返回,javascript,react-native,react-redux,react-navigation,Javascript,React Native,React Redux,React Navigation,我目前正在从React Navigation 4迁移到5,并由此实现了状态管理的redux。我对redux真的很陌生,不知道自己做错了什么 我正在尝试获取用户对象,例如令牌和用户名。在获取单个整数(如loginStatus)时,它似乎起作用,但在获取字符串时,它并不像您在下面看到的那样起作用。我保存的是错误的还是遗漏了什么 console.log(userToken)的输出在Home.js中 LOG {"0":"{","1":&qu

我目前正在从React Navigation 4迁移到5,并由此实现了状态管理的redux。我对redux真的很陌生,不知道自己做错了什么

我正在尝试获取用户对象,例如令牌和用户名。在获取单个整数(如loginStatus)时,它似乎起作用,但在获取字符串时,它并不像您在下面看到的那样起作用。我保存的是错误的还是遗漏了什么

console.log(userToken)的输出在Home.js中

 LOG  {"0":"{","1":"\"","2":"t","3":"o","4":"k","5":"e","6":"n","7":"\"","8":":","9":"\"","10":"t","11":"e","12":"s","13":"t","14":"_","15":"t","16":"o","17":"k","18":"e","19":"n","20":"_","21":"v","22":"a","23":"l","24":"u","25":"e","26":"\"","27":",","28":"\"","29":"u","30":"s","31":"e","32":"r","33":"n","34":"a","35":"m","36":"e","37":"\"","38":":","39":"\"","40":"t","41":"e","42":"s","43":"t","44":"_","45":"t","46":"o","47":"k","48":"e","49":"n","50":"_","51":"u","52":"s","53":"e","54":"r","55":"n","56":"a","57":"m","58":"e","59":"\"","60":"}"}
如果我删除JSON,stringify()会给出下面的错误

 ERROR  Error: Objects are not valid as a React child (found: object with keys {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60}). If you meant to render a collection of children, use an array instead.
Home.js(当令牌存在且用户已登录时)

import React,{useState}来自“React”;
从“react native”导入{平台、样式表、视图、图像、状态栏、文本输入、TouchableOpacity、文本、键盘、按钮};
从“@react native async storage/async storage”导入异步存储;
从“../../redux/actions/userActions”导入{updateUser};
从“react-redux”导入{useSelector,useDispatch};
功能主屏幕({navigation}){
const[handleBlock,setHandleBlock]=useState(0);
constUserToken=useSelector((state)=>JSON.stringify(state.user.userdata));
const dispatch=usedpatch();
React.useffect(()=>{
const unsubscribe=navigation.addListener('focus',()=>{
console.log(“onFocusFunction”);
log(userToken);
});
退订;
},[导航];
返回(
…这里只是一些渲染代码。。。
);
}
导出默认主屏幕;
Signin.js(成功登录时运行的代码)

const setData=async()=>{
让loginData={token:“test\u token\u value”,username:“test\u username\u value”};
等待AsyncStorage.setItem('data',JSON.stringify(loginda));
调度(更新用户(登录数据));
}; setData();
actionTypes.js

export const UPDATE_USER='UPDATE_USER';
userActions.js

从“/actionTypes”导入{UPDATE_USER};
const updateUser=(userdata)=>{
返回{
类型:更新用户,
userdata:userdata,
};
};
导出{updateUser};
index.js(减速器)

从'redux'导入{combinereducer};
从“./user”导入用户;
导出默认合并器({
用户,
});
user.js(reducer)

从“../actions/actionTypes”导入{UPDATE_USER};
常量初始状态={
用户数据:{},
登录状态:-1,//-1==正在加载,0=未登录,1==已登录
};
const updateUser=(状态、操作)=>{
设ud=action.userdata;
返回{…状态,userdata:Object.assign({},ud),loginStatus:ud?1:0};
};
const userReducer=(state=initialState,action)=>{
开关(动作类型){
案例更新用户:
返回updateUser(状态、操作);
违约:
返回状态;
}
};
导出默认userReducer;
index.js(商店)

从“../reducers/index”导入减缩器;
从“redux”导入{createStore,applyMiddleware};
从“redux thunk”导入thunk;
const applyStoreMiddleware=applyMiddleware(thunk)(createStore);
export const store=applyStoreMiddleware(还原器);
加载屏幕.js

从“../../redux/actions/userActions”导入{updateUser};
从'react redux'导入{useDispatch};
函数加载屏幕(){
const dispatch=usedpatch();
useffect(()=>{
异步函数getAsyncData(){
让data=wait AsyncStorage.getItem('data');
控制台日志(数据);
调度(更新用户(数据));
}
}

我从这里开始使用初始代码:

我相信您正在尝试使用对象作为访问令牌而不是令牌,您可以尝试以下操作:
const userToken=useSelector((state)=>state.user.userdata.token);
我也尝试过,在这种情况下,我没有得到错误,但得到了“undefined”作为响应。state.user.loginStatus返回1,如果您的评论部分正确,那么如果您想给出答案,我将接受。同时更改let loginda={token:“test\u token\u value”,username:“test\u username\u value”};更改let loginda={token:“test\u token\u value”,username:“test\u username\u value”};并更改分派(updateUser(data));分派(updateUser(JSON.parse(data));在LoadingScreen.js中完全解决了:)