以 redux 状态存储从 useRef 返回的对象
storing returned object from useRef in redux state
我有一个问题。
我正在使用 next js
创建一个音乐平台(如 spotify)并管理状态,我使用 redux toolkit
。为了播放音乐,我在一个组件中添加了 audio
,该组件具有一些组件来更改音乐时间或音量等。为了更改音量或时间等,我使用了 useRef
钩子并更改了音乐时间几乎是这样的(这是一个 return 一些元素仅适用于大型设备的组件,如果设备很小,音频风格将是 display: none;
):
//inside a component(for example AudioLarge.jsx)
const audioRef = useRef()
useEffect(() => {
//if ref is ready, change the time
if(audioRef.current) audioRef.current.currentTime = 50;
}, [])
return (
<>
<audio src={source} ref={audioRef} />
</>
)
问题从这里开始。我想从 AudioSmall.jsx
组件中的 AudioLarge.jsx
访问 ref,其中 return 是小型设备的一些元素。我有一个解决方案。我可以将音乐参考存储在 redux 状态。但是可以吗?这是一个很好的解决方案吗?它会在未来造成问题吗?是否有更好的解决方案可以在全球范围内访问音乐参考?感谢您的帮助:)
是的,您可以将其存储在 redux store 中...
您可以将其存储在从上下文 api 到 redux
的任何状态管理系统中
但最好的方法是在 reducer 中声明对它的引用,并意味着通过在该 reducer 中的操作来更新其状态...
即它自己的减速器让你的代码整洁
//in your page
import { useRef } from 'react';
.......
const audioref = useRef(null);
<audio ref = {audioref} />
在代码中的某处,您通过操作将引用存储在商店中
<button onClick = {() => addAudioRef(audioref)}>play</button>
在你的减速器中
switch(state.action) {
....
case 'audioref-added':
return {...state, audioref : payload.audioref.current.play()}
case 'audioref-stoped':
return {...state, audioref : state.audioref.current.stop()}
....
}
我有一个问题。
我正在使用 next js
创建一个音乐平台(如 spotify)并管理状态,我使用 redux toolkit
。为了播放音乐,我在一个组件中添加了 audio
,该组件具有一些组件来更改音乐时间或音量等。为了更改音量或时间等,我使用了 useRef
钩子并更改了音乐时间几乎是这样的(这是一个 return 一些元素仅适用于大型设备的组件,如果设备很小,音频风格将是 display: none;
):
//inside a component(for example AudioLarge.jsx)
const audioRef = useRef()
useEffect(() => {
//if ref is ready, change the time
if(audioRef.current) audioRef.current.currentTime = 50;
}, [])
return (
<>
<audio src={source} ref={audioRef} />
</>
)
问题从这里开始。我想从 AudioSmall.jsx
组件中的 AudioLarge.jsx
访问 ref,其中 return 是小型设备的一些元素。我有一个解决方案。我可以将音乐参考存储在 redux 状态。但是可以吗?这是一个很好的解决方案吗?它会在未来造成问题吗?是否有更好的解决方案可以在全球范围内访问音乐参考?感谢您的帮助:)
是的,您可以将其存储在 redux store 中... 您可以将其存储在从上下文 api 到 redux
的任何状态管理系统中但最好的方法是在 reducer 中声明对它的引用,并意味着通过在该 reducer 中的操作来更新其状态... 即它自己的减速器让你的代码整洁
//in your page
import { useRef } from 'react';
.......
const audioref = useRef(null);
<audio ref = {audioref} />
在代码中的某处,您通过操作将引用存储在商店中
<button onClick = {() => addAudioRef(audioref)}>play</button>
在你的减速器中
switch(state.action) {
....
case 'audioref-added':
return {...state, audioref : payload.audioref.current.play()}
case 'audioref-stoped':
return {...state, audioref : state.audioref.current.stop()}
....
}