是否可以在减速器本身中调度动作?我有一个进度栏和一个音频元素。目标是在音频元素中的时间更新时更新进度条。但是我不知道在哪里放置ontimeupdate事件处理程序,或者如何在ontimeupdate的回调中分派操作以更新进度条。这是我的代码:
//reducer
const initialState = {
audioElement: new AudioElement('test.mp3'),
progress: 0.0
}
initialState.audioElement.audio.ontimeupdate = () => {
console.log('progress', initialState.audioElement.currentTime/initialState.audioElement.duration);
//how to dispatch 'SET_PROGRESS_VALUE' now?
};
const audio = (state=initialState, action) => {
switch(action.type){
case 'SET_PROGRESS_VALUE':
return Object.assign({}, state, {progress: action.progress});
default: return state;
}
}
export default audio;
在减速器内调度动作是一种反模式
。减速器应该没有副作用,只需消化操作有效负载并返回新的状态对象即可。在Reducer中添加侦听器和调度动作可能导致连锁动作和其他副作用。
听起来像您的已初始化AudioElement
类和事件侦听器属于组件而不是处于状态。在事件侦听器中,您可以调度一个动作,该动作将progress
在状态中更新。
您可以AudioElement
在新的React组件中初始化类对象,也可以仅将该类转换为React组件。
class MyAudioPlayer extends React.Component {
constructor(props) {
super(props);
this.player = new AudioElement('test.mp3');
this.player.audio.ontimeupdate = this.updateProgress;
}
updateProgress () {
// Dispatch action to reducer with updated progress.
// You might want to actually send the current time and do the
// calculation from within the reducer.
this.props.updateProgressAction();
}
render () {
// Render the audio player controls, progress bar, whatever else
return <p>Progress: {this.props.progress}</p>;
}
}
class MyContainer extends React.Component {
render() {
return <MyAudioPlayer updateProgress={this.props.updateProgress} />
}
}
function mapStateToProps (state) { return {}; }
return connect(mapStateToProps, {
updateProgressAction
})(MyContainer);
请注意,会updateProgressAction
被自动包装,dispatch
因此您无需直接调用dispatch。
是否可以在一个减速器中发送一个动作?我有一个progressbar和一个音频元素。目标是在音频元素中更新时间时更新progressbar。但我不知道将ontimeupdate eventhandler放置在何处,也不知道如何在ontimeupdate的回调中分派操作来更新ProgressBar。下面是我的代码:
本文向大家介绍大中央派遣(GCD),包括了大中央派遣(GCD)的使用技巧和注意事项,需要的朋友参考一下 Grand Central Dispatch(GCD)是Apple Mac OS X和iOS操作系统的一项技术,是对C语言,API和运行时库的扩展的组合,允许应用程序开发人员识别要在其中运行的代码部分平行。像OpenMP一样,GCD管理线程的大多数细节。GCD识别对称为块的C和C ++语言的扩展
除了我想让我的cherrypy服务器启动两个类之外,我还将遵循cherrypy教程“让它Rest一下”:一个用于服务一些静态文件,另一个用于RESTful API: api.py: 服务器py: 但是,当我启动服务器()并在上执行GET时,我会得到这个错误: 500内部服务器错误 服务器遇到意外情况,无法满足请求。 Traceback(最近的最后一次调用):File"/usr/local/lib/
作为挂钩新手,我正在转换一些具有多个状态属性的旧代码,在搜索如何减少最初设置的useState挂钩数量时,我遇到了这段代码(失去了链接)。以下useReducer钩子代码按预期工作。我想我知道state值是通过setState(dispatch)更新的,我想弄清楚的是reducer的第二个参数是如何使用spread语法在state和newState之间复制值的。我看到的所有示例都使用switch语
我有一个逻辑问题,我是否应该对操作中的每个回调进行多个函数调用: 或者我可能想把这些调用转移到redux减速机中,然后从那里调用下一个函数? 第二种方法在我看来像是反模式,会产生意大利面条式的代码...也许我错了?
问题内容: 说我有一个带有这样的渲染的组件: 其中jewelStyle = 如何使背景颜色动态并随机分配?我试过了 但这会使View的所有实例具有相同的颜色,我希望每个实例都是唯一的。 有小费吗? 问题答案: 我通常按照以下方式进行操作: … 每次渲染View时,都会使用与之关联的随机颜色实例化一个新样式对象。当然,这意味着每次重新渲染组件时颜色都会改变,这也许不是您想要的。相反,您可以执行以