我正在做一个有关系数据的项目。这个项目在Redux中,我有一个问题。我试了很久,但我不能在前面显示“关键字”。我做错了什么?
下面是reducer:
case START_DOWNLOAD_KEYWORDS:
return {
...state,
loading: true,
thisdomain: action.payload
}
case DOWNLOAD_KEYWORDS_SUCCESS:
return {
...state,
keywords: state.keywords.filter(keyword => keyword.project_id == state.thisdomain)
}
下面是操作:
export function getKeywordsAction(id) {
return async (dispatch) => {
dispatch(startDownloadKeywords(id));
try {
const response = await clienteAxios.get('/keywords');
dispatch(downloadKeywordsSuccess(response.data));
} catch (error) {
console.log(error);
dispatch(downloadKeywordsError());
}
}
};
const startDownloadKeywords = (id) => ({
type: START_DOWNLOAD_KEYWORDS,
payload: id
});
const downloadKeywordsSuccess = keywords => ({
type: DOWNLOAD_KEYWORDS_SUCCESS,
payload: keywords
});
最后是容器:
const { id } = props.match.params;
const dispatch = useDispatch();
useEffect( () => {
// Consultar la api
const chargeKeywords = (id) => dispatch(getKeywordsAction(id));
chargeKeywords(id);
}, []);
//obtener el state
const keywords = useSelector(state => state.domains.keywords);
因此,在此之后,我使用地图调用{关键字},但我看不到任何东西,因为keywords.length === 0。
在START_DOWNLOAD_KEYWORDS中:我得到:
{
domains: {
domains: [],
error: null,
loading: true,
domaindelete: null,
thisdomain: '3',
keywords: []
}
}
在DOWNLOAD_KEYWORDS_SUCCESS中是这样的:
{
domains: {
domains: [
{
id: 2,
name: 'Bla bla',
url: 'http://blabla.com',
country: 'España'
},
{
id: 3,
name: 'Hello',
url: 'https://hellok.com',
country: 'España'
}
],
error: null,
loading: false,
domaindelete: null,
thisdomain: '3',
keywords: []
}
}
谢谢你的帮助!
发布于 2020-12-23 10:33:43
我认为您的代码的问题出在case DOWNLOAD_KEYWORDS_SUCCESS
中
在这行中,keywords: state.keywords.filter(keyword => keyword.project_id
应该是keywords: action.payload.filter(keyword => keyword.project_id
此时您的状态没有更改,action.payload
是更新后的数据。
发布于 2020-12-23 07:14:59
我发现减速机有误,一定是===。但是仍然有同样的问题:
keywords: state.keywords.filter(keyword => keyword.project_id === state.thisdomain)
https://stackoverflow.com/questions/65417034
复制相似问题