在這種情況下,您最好的選擇是商店聽衆。無論是普通的偵聽器函數還是連接React的React組件。
假設一個簡單的功能,使噪音:
function playSound() {
const audio = new Audio('audio_file.mp3')
audio.play()
}
您可以創建存儲觀察者和傾聽的變化:
function createSoundObserver (store) {
let prevState = store.getState()
return store.subscribe(() => {
const nextState = store.getState()
if (prevState.messages.length < nextState.messages.length) {
playSound()
}
prevState = nextState
})
}
可以實現與一個陣營相同成分:
import React, {Component, PropTypes} from 'react'
import {connect} from 'react-redux'
class Notifier extends Component {
static propTypes = {
messages: PropTypes.array.isRequired
}
componentDidUpdate (prevProps) {
if (this.props.messages.length > prevProps.messages.length) {
playSound()
}
}
render() { return null }
}
export default connect((state, props) => {
const {messages} = state
return {messages}
}, {})(Notifier)
只要呈現樹中存在通告程序,它就會檢查變化a相應地播放聲音。這種方法的優點是,如果您想保持安靜,您不必額外注意取消訂閱事件,並且無縫地進行服務器端渲染。
中間件? http://redux.js.org/docs/advanced/Middleware.html – azium