【发布时间】:2026-01-29 17:35:01
【问题描述】:
我正在尝试更新状态(JSON 数据)。 初始状态是一个空对象,因为将在第一次渲染时填充“树”(json 数据)(树数据来自一个承诺,所以我尝试使用 useEffect 来模拟它)。 问题是我不知道如何用每个滑块(target.value)的值更新“tree”中的“val”属性。
import React, {useEffect, useState} from 'react'
import ReactDOM from 'react-dom'
import Slider from './slider'
let data = [
{id: 'Item 1', index: 0, name: 'Item 1'},
{id: 'Item 2', index: 1, name: 'Item 2'},
{id: 'Item 3', index: 2, name: 'Item 3'},
{id: 'Item 4', index: 3, name: 'Item 4'},
{id: 'Item 5', index: 5, name: 'Item 5'},
{id: 'Item 6', index: 6, name: 'Item 6'},
{id: 'Item 7', index: 7, name: 'Item 7'},
{id: 'Item 8', index: 9, name: 'Item 8'},
{id: 'Item 9', index: 12, name: 'Item 9'},
]
let data2 = [
{id: 1, val: 0.5088961783678},
{id: 2, val: 0.074147856793482},
{id: 3, val: 0.074147856793482},
{id: 5, val: 0.074147856793482},
{id: 6, val: 0.074147856793482},
{id: 7, val: 0.074147856793482},
{id: 0, val: 0.097068824077823},
{id: 9, val: 0.074147856793482},
{id: 12, val: 0.074147856793482},
]
function App() {
const [values, setValues] = useState({})
function handleChange(index, value) {
setValues()
}
let tree = {}
data2.forEach((v) => {
tree[v.id] = (v.val * 100).toFixed()
})
React.useEffect(() =>{
setValues(tree)
},[])
return (
<>
{data.map((item, index) => (
<Slider
key={item.id}
value={values[item.index]}
title={item.name}
onChange={(e) => handleChange(index, e.target.value)}
/>
))}
</>
)
}
ReactDOM.render(<App />, document.getElementById('root'))
【问题讨论】:
-
您要显示多个滑块?
-
我已经通过映射数据数组来做到这一点。
-
树和数据数组是什么关系?
-
树中的“val”应该分配给与数据索引匹配的滑块。例如:id:0 的 val 应该分配给索引为 0 的滑块。我已经这样做了
标签: javascript json reactjs react-hooks