Reactjs 从saga制作模板:在函数中包装saga的一部分
我需要像佐贺模板-包装的一部分佐贺在功能。我这样做是因为我的许多传奇都有类似的结构,我试图分解这些代码。请不要关注细节,请给我大致的看法。我在调用类似模板的函数时遇到问题 我想这样做:Reactjs 从saga制作模板:在函数中包装saga的一部分,reactjs,redux,react-redux,redux-saga,Reactjs,Redux,React Redux,Redux Saga,我需要像佐贺模板-包装的一部分佐贺在功能。我这样做是因为我的许多传奇都有类似的结构,我试图分解这些代码。请不要关注细节,请给我大致的看法。我在调用类似模板的函数时遇到问题 我想这样做: function* signInSaga({ payload: { email, password } }) { const signUpBodyRequest = { 'email': email, 'password': password, }; try { const
function* signInSaga({ payload: { email, password } }) {
const signUpBodyRequest = {
'email': email,
'password': password,
};
try {
const formData = new FormData();
formData.append('email', email);
formData.append('password', password);
yield put(actions.requestSignIn());
const data = yield call(() => {
return fetch('test.url/sign_in', {
method: 'POST',
body: formData
}).then(function(response) {
return response.json();
});
});
if (data.token) {
yield put(actions.requestSignInSuccess(data));
} else {
yield put(actions.requestSignInError());
}
} catch (error) {
yield put(actions.requestSignInError());
}
}
function* signInSaga({ payload: { email, password } }) {
const signInBodyRequest = {
'email': email,
'password': password
};
sagaTemplate(
'test.url/sign_in',
actions.requestSignIn,
actions.requestSignInSuccess,
actions.requestSignInError,
'POST',
signInBodyRequest
);
}
要喜欢这个:
function* signInSaga({ payload: { email, password } }) {
const signUpBodyRequest = {
'email': email,
'password': password,
};
try {
const formData = new FormData();
formData.append('email', email);
formData.append('password', password);
yield put(actions.requestSignIn());
const data = yield call(() => {
return fetch('test.url/sign_in', {
method: 'POST',
body: formData
}).then(function(response) {
return response.json();
});
});
if (data.token) {
yield put(actions.requestSignInSuccess(data));
} else {
yield put(actions.requestSignInError());
}
} catch (error) {
yield put(actions.requestSignInError());
}
}
function* signInSaga({ payload: { email, password } }) {
const signInBodyRequest = {
'email': email,
'password': password
};
sagaTemplate(
'test.url/sign_in',
actions.requestSignIn,
actions.requestSignInSuccess,
actions.requestSignInError,
'POST',
signInBodyRequest
);
}
现在我的传奇模板看下一步:
import { call, put } from 'redux-saga/effects';
export function* sagaTemplate(url, request, requestSucces, requestError, method, bodyRequest) {
try {
const formData = new FormData();
for (let [key, value] of Object.entries(bodyRequest)) {
formData.append(key, value);
}
yield put(request());
const data = yield call(() => {
return fetch(url, {
method: method,
body: formData
}).then(function(response) {
return response.json();
});
});
if (data.token) {
yield put(requestSucces(data));
} else {
yield put(requestError());
}
} catch (error) {
yield put(requestError());
}
}
如何正确地在saga中调用我的函数模板?有两件事,一件是使用saga effect调用,该调用获取要调用的函数,然后是以逗号分隔的参数列表
yield call(sagaTemplate, arguments, in, their, correct, order);
其次,我建议发送一个对象,它可以被解构,它包含所有的参数,将混合参数顺序的可能性保持为零