【发布时间】:2017-12-11 12:46:06
【问题描述】:
这样的传奇效果很好:
function* getPosition() {
yield navigator.geolocation.getCurrentPosition(function(pos) {
console.log(`I am getPosition: ${pos.coords.latitude}, ${pos.coords.longitude}`);
});
}
但我需要 Redux 状态树中的坐标。所以,我尝试了一些模式,但它们都不起作用。 1) 没有办法让变量超出 getCurrentPosition 范围
function* getPosition() {
let position = {};
yield navigator.geolocation.getCurrentPosition(function(pos) {
position = pos;
});
// either
console.log(`I am getPosition: ${position.coords.latitude}, ${position.coords.longitude}`);
// or
yield console.log(`I am getPosition: ${position.coords.latitude}, ${position.coords.longitude}`);
// Any of two is undefined
}
2) 没有办法返回和赋值:
function* getPosition() {
const position = yield navigator.geolocation.getCurrentPosition(function(pos) {
return pos;
});
yield console.log(`I am getPosition: ${position.coords.latitude}, ${position.coords.longitude}`);
}
3) 方法put无效:
function* getPosition() {
yield navigator.geolocation.getCurrentPosition(function(pos) {
// Pos fetched
console.log(`I am getPosition: ${pos.coords.latitude}, ${pos.coords.longitude}`);
// Nothing happens. State is empty object.
put({
type: LOCATION_SET_POSITION,
pos
});
});
}
locationReducer 位于 rootReducer 内部,因为其他工作的 reducer 是:
locationReducer.js
export function locationReducer(state = {}, action) {
switch (action.type) {
case LOCATION_SET_POSITION:
return action.pos
default:
return state;
}
}
而且我没有 actionCreater。据我了解,put 方法都
调度一个动作并设置 actionCreator。
如何将坐标放入状态树?
【问题讨论】:
-
你没有得到答案的原因是因为你没有使用任何效果,你提到了一些关于
put效果的东西,但是,我看不到你在哪里使用它。记得使用call来管理异步操作,否则,它不是传奇,它只是一个函数生成器......最好
标签: javascript redux-saga