【发布时间】:2021-04-02 00:21:20
【问题描述】:
这是我的第一个 StackOverflow 问题,请随时添加您想要的任何建议。
我有一个 AudioControls 组件,它呈现四个不同的 Controls 组件,每个组件用于不同的音频选项(音量、低音、中音、高音)。 我以父母知道并管理四种状态的方式编写它: 使用状态({ 音量:50, 低音:50, 中:50, 高音:50, }) 然后将这些值作为道具传递给孩子。
对此我有两个担忧:
-
控件组件完全一样,也许它们可以有自己的值状态(在每个控件上放置一个 audioValue 状态)。我已经读过在可能的情况下总是提升状态是一个很好的做法,但是为什么需要它呢?这样做的充分理由是什么?
-
鉴于这些控件都非常相似,有没有办法将地图功能与这些控件一起使用?当然,不会失去可读性。
这是音频控制代码:
function AudioControls() {
const [audioValues, setAudioValues] = useState({
volume: 50,
bass: 50,
mid: 50,
treble: 50
})
function handleControl(option, id) {
const oldValue = audioValues[id]
const newValue = option === "+" ? oldValue + 1 : oldValue - 1
setAudioValues(prevState => (
{
...prevState,
[`${id}`] : newValue
}
))
}
return(
<>
<Control
id="volume"
name="Volume"
value={audioValues.volume}
handleControl={handleControl}
/>
<Control
id="bass"
name="Bass"
value={audioValues.bass}
handleControl={handleControl}
/>
<Control
id="mid"
name="Mid"
value={audioValues.mid}
handleControl={handleControl}
/>
<Control
id="treble"
name="Treble"
value={audioValues.treble}
handleControl={handleControl}
/>
</>
)
}
这里是控制组件:
function Control({ id, name, value, handleControl }) {
return(
<div>
<button onClick={() => handleControl("+", id)}>
+
</button>
<label>{name}: {value}</label>
<button onClick={() => handleControl("-", id)}>
-
</button>
</div>
)
}
【问题讨论】:
标签: javascript reactjs refactoring