如何使用 redux 处理 react/react-native 中的重复事件?
How to do recurrent events in react/react-native with redux?
我正在做一个反应本机应用程序,在用户的某些操作将开始跟踪 gps 位置,并在其他情况下停止。
但是我遇到了一些障碍,没有找到执行这个基于时间的位置跟踪器的正确方法,因为它对于模式来说似乎不自然。
以下是我的想法:
- 使用
redux-thunk
. 将其视为异步
- 使用
redux-observable
定时事件。
- 使用
sagas
.
- 在我的
component
中使用 SetTimeout
(这是最简单的解决方案,但我不想阻止我的用户四处浏览,我不认为这是 UI 的责任)
所以我打算把它作为未来的参考,在我写这个问题的时候,我终于有了一个简单的解决方案。
import * as types from './types'
var gpsGetInterval
export function startLocationTracking(time = 1000){
return dispatch => {
gpsGetInterval = setInterval(() =>{
navigator.geolocation.getCurrentPosition(
(position) => {
dispatch({
type: types.NEW_POSITION,
state: JSON.stringify(position)
})
})
}, time)
dispatch({
type: types.START_RUN
})
}
}
export function stopLocationTracking(){
clearInterval(gpsGetInterval)
return {
type: types.STOP_RUN
}
}
所以我知道这可能无法扩展,您可能需要在 redux-observable
或 sagas
下使用 epics
。我在这 2 中遇到的困难是:
- 使用
redux-observable
清除重复发生的事件并不清楚(或者看起来像是一种暂停它的解决方法)。
- 使用
sagas
扩展或聚合似乎并不简单。
使用 redux-observables
这是我需要的代码,如果有人对这种情况有好的想法,我很想听听 :) :
export function inStartRun(action$){
return action$.ofType(types.START_RUN)
.switchMap(function () {
Rx.Observable
.interval(1000)
.do(function () { console.log('tick...') })
.share()
.mapTo({ type: types.STOP_RUN})
});
}
特别感谢 Jay Phelps 对我在 repo 中提出的问题 https://github.com/redux-observable/redux-observable/issues/168
我正在做一个反应本机应用程序,在用户的某些操作将开始跟踪 gps 位置,并在其他情况下停止。
但是我遇到了一些障碍,没有找到执行这个基于时间的位置跟踪器的正确方法,因为它对于模式来说似乎不自然。 以下是我的想法:
- 使用
redux-thunk
. 将其视为异步
- 使用
redux-observable
定时事件。 - 使用
sagas
. - 在我的
component
中使用SetTimeout
(这是最简单的解决方案,但我不想阻止我的用户四处浏览,我不认为这是 UI 的责任)
所以我打算把它作为未来的参考,在我写这个问题的时候,我终于有了一个简单的解决方案。
import * as types from './types'
var gpsGetInterval
export function startLocationTracking(time = 1000){
return dispatch => {
gpsGetInterval = setInterval(() =>{
navigator.geolocation.getCurrentPosition(
(position) => {
dispatch({
type: types.NEW_POSITION,
state: JSON.stringify(position)
})
})
}, time)
dispatch({
type: types.START_RUN
})
}
}
export function stopLocationTracking(){
clearInterval(gpsGetInterval)
return {
type: types.STOP_RUN
}
}
所以我知道这可能无法扩展,您可能需要在 redux-observable
或 sagas
下使用 epics
。我在这 2 中遇到的困难是:
- 使用
redux-observable
清除重复发生的事件并不清楚(或者看起来像是一种暂停它的解决方法)。 - 使用
sagas
扩展或聚合似乎并不简单。
使用 redux-observables
这是我需要的代码,如果有人对这种情况有好的想法,我很想听听 :) :
export function inStartRun(action$){
return action$.ofType(types.START_RUN)
.switchMap(function () {
Rx.Observable
.interval(1000)
.do(function () { console.log('tick...') })
.share()
.mapTo({ type: types.STOP_RUN})
});
}
特别感谢 Jay Phelps 对我在 repo 中提出的问题 https://github.com/redux-observable/redux-observable/issues/168