gpt4 book ai didi

reactjs - 使用promise/thunk将参数通过action传递给reducer

转载 作者:行者123 更新时间:2023-12-04 17:53:29 25 4
gpt4 key购买 nike

我使用 react 和 redux 与 Promise/thunk 作为中间件。它工作得很好。

有一点我想不通。以下工作:

我从我的组件分派(dispatch)一个 Action :

this.props.dispatch(addTag({ name: name, photoId: this.props.photoId}))

我的操作执行一个包裹在 thunk 中的 ajax 并返回一个 promise :
export function addTag(payload) {


var url = "/api/photos/".concat(payload.photoId, "/addtag?name=" ,payload.name)
return function(dispatch) {
var request = new Request(url, {headers: headers});
fetch(request)
.then((response) => {
dispatch({type: "ADD_TAG", payload: response.json()})
})
.catch((err) => {
dispatch({type: "ADD_TAG", payload: err})
})
}
}

然后 reducer 捡起它:
  case 'ADD_TAG_FULFILLED': {
newState = state
.set('tags', action.payload.tags)
.set('inputValue', '')
return newState
}

现在,如果我想将传递给 Action 的有效载荷传递给 reducer 怎么办? (为了让我进入状态并返回组件......
我只能通过混合 Thunk 和“破坏”promise 中间件功能来做到这一点......这是最好的解决方案吗?
export function addTag(payload) {
var url = "/api/photos/".concat(payload.photoId, "/addtag?name=" ,payload.name)
return function(dispatch) {
var request = new Request(url, {headers: headers});
fetch(request)
.then((response) => {
return (response.json())
})
.then((json) => {
dispatch({type: "ADD_TAG", payload: {suggestions: json, pl: payload})
})
.catch((err) => {
dispatch({type: "ADD_TAG", payload: err})
})
}
}

最佳答案

解决办法是:

export function tagInput(tagInput) {
var url = '/api/photos/get_tag_list?term='.concat(tagInput);
return function (dispatch) {
var request = new Request(url, { headers: headers, method: 'GET' });
fetch(request)
.then(response => {
dispatch({ type: 'TAG_INPUT', payload: response.json() });
})
.catch((err) => {
dispatch({ type: 'TAG_INPUT_ERROR', payload: err });
})
.then(() => {
dispatch({ type: 'TAG_INPUT_VALUE', payload: tagInput });
});
};
}

关于reactjs - 使用promise/thunk将参数通过action传递给reducer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42377954/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com