【发布时间】:2019-12-17 05:42:46
【问题描述】:
我在 github 上的 react-boilerplate 开源项目中使用 redux saga,并且我正在使用 redux saga 删除用户。该代码在 create-react-app 上完美运行,但不适用于 react-boilerplate (https://github.com/yarusophialiu/react-boilerplate/blob/master/app/containers/HomePage/saga.js)。问题是 yield take(...) 返回 null。我 console.log action.js 并发现当我单击删除时调度了一个动作。任何帮助将不胜感激!!!
主页/saga.js
export function* deleteUser({ userId }) {
try {
yield call(api.deleteUser, userId);
// yield call(getUsers);
} catch (e) {
console.log(e);
}
}
export function* watchDeleteUserRequest() {
// yield takeLatest(DELETE_USER_REQUEST, getRepos);
while (true) {
const action = yield take(DELETE_USER_REQUEST);
yield call(deleteUser, {
userId: action.payload.userId,
});
}
}
主页操作.js
export const deleteUserRequest = userId => ({
type: DELETE_USER_REQUEST,
payload: {
userId,
},
});
主页/index.js
...
import { createStructuredSelector } from 'reselect';
import { useInjectReducer } from 'utils/injectReducer';
import { useInjectSaga } from 'utils/injectSaga';
import { changeUsername, deleteUserRequest } from './actions';
import reducer from './reducer';
import saga from './saga';
import UserList from '../UsersPage/UserList';
const key = 'home';
export function HomePage({
username,
loading,
error,
repos,
onSubmitForm,
onChangeUsername,
}) {
useInjectReducer({ key, reducer });
console.log('home', saga);
useInjectSaga({ key, saga });
const [users, setUsers] = useState([]);
useEffect(() => {
axios
.get('https://rem-rest-api.herokuapp.com/api/users', {
params: {
limit: 1000,
},
})
.then(({ data }) => {
setUsers(data.data);
});
}, []);
const handleDeleteUserClick = userId => {
console.log('delete', deleteUserRequest(userId));
deleteUserRequest(userId);
};
const reposListProps = {
loading,
error,
repos,
};
return (
<article>
<div>
<UserList users={users} onDeleteUser={handleDeleteUserClick} />
</div>
</article>
);
}
...
【问题讨论】:
标签: redux-saga