Javascript 当状态更新时,React组件不重新呈现
更新redux存储时,React组件未呈现 如果我使用set timeout,我可以在控制台中看到数据。组件不渲染的原因 我的组件没有得到更新的原因是什么。我已经附上下面的代码 组成部分 减速器Javascript 当状态更新时,React组件不重新呈现,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,更新redux存储时,React组件未呈现 如果我使用set timeout,我可以在控制台中看到数据。组件不渲染的原因 我的组件没有得到更新的原因是什么。我已经附上下面的代码 组成部分 减速器 您需要在reducer中返回一个新的对象实例 React需要对象的新引用,以找出已更改的状态 当您传递action.payload时,您将在获取数据后返回相同的实例 function getalluserlist(state = [], action) { switch (action.type)
您需要在reducer中返回一个新的对象实例 React需要对象的新引用,以找出已更改的状态 当您传递action.payload时,您将在获取数据后返回相同的实例
function getalluserlist(state = [], action) {
switch (action.type) {
case "userlist":
return action.payload;
default:
return state;
}
}
因此,返回一个新的引用,我猜状态的形状是[]
我不认为这是问题所在,requestAPI不会等待任何承诺的解决,而只是返回一个空数组payload@AsafAviv这可能也是一个问题,但最大的问题是如何在reducer中返回数据,所以Sung的答案是正确的too@AdamKosmala我不认为action.payload==状态或者我遗漏了什么?
function requestAPI(type) {
console.log("requestAPI")
switch (type) {
case 'country':
let countryist = [];
getcountryist()
.then(data => countryist.push(...data.resultSet))
.catch(reason => console.log(reason.message))
return {
type: 'countrylist',
payload: countryist
};
case 'all':
let userlist = [];
getlistofuser()
.then(data => userlist.push(...data.resultSet))
.catch(reason => console.log(reason.message))
return {
type: 'userlist',
payload: userlist
};
}
}
export default requestAPI;
async function getlistofuser() {
let response = await fetch('https://api.myjson.com/bins/13g2pv');
let data = await response.json();
return data;
}
async function getcountryist() {
let response = await fetch('https://api.myjson.com/bins/1g9fqv');
let data = await response.json();
return data;
}
function getalluserlist(state = [], action) {
console.log("Reducer")
console.log(action.payload)
switch (action.type) {
case 'userlist':
return action.payload
default:
return state
}
}
export default getalluserlist;
function getalluserlist(state = [], action) {
switch (action.type) {
case "userlist":
return action.payload;
default:
return state;
}
}
function getalluserlist(state = [], action) {
switch (action.type) {
case "userlist":
return [...state, action.payload];
default:
return state;
}
}