如題,有一個React Radio操作上的疑問,就是我的資料結構如下:
const materialList = [  
    {
      id:1,
      kindName: '溫度',
      subList:
      [
        {
          id: 1,
          name: '95'
        },
        {
          id: 2,
          name: '65'
        },
      ]
    },
    {
      id:2,
      kindName: '熟度',
      subList:
      [
        {
          id: 3,
          name: '七分'
        },
        {
          id: 4,
          name: '五分'
        },
      ]
    },
    {
      id:3,
      kindName: '容量',
      subList:
      [
        {
          id: 5,
          name: '500ml'
        },
        {
          id: 6,
          name: '700ml'
        },
      ]
    },
  ]
想用React做出每個規格分類底下的Radio單選按鈕
大概長下面這樣:
我在return區用雙層map第一層先map出標題(有用Chakra Ui 所以html標籤是Text),第二層用第一層解出來物件裡的subList做第二次map把選項給loop出來,可是Radio在沒使用 checked屬性時他會是多選的,依照網路上教學,使用 checked屬性給他一個state去判斷現在是哪一個值,他才會是單選的。
程式碼如下,html標籤因為有用Chakra UI所以會不太一樣。
{materialList}.map(m => (
  <Flex key={m.id}>
    <Text>{`${m.name}: `}</Text>
      <Stack direction='row'>
        {m.subList.map(t => (
          <Flex key={t.id}>
            <input 
              type="radio" 
              value={t.id} 
              onChange={() => setValue(t.id)} 
              checked={value}
            />
            <Text>{t.name}</Text>
          </Flex>
        ))}
      </Stack>
  </Flex>
))}
現在有個問題是,我要送出的資料結構需要是如一開始materialList
一樣,只是subList裡面都只有一個object,就是radio所選的那個,但是用checked和onChange的方式做單選,會因都吃同一個value所以所有Radio選項最終都只牽涉到那一個value值,不會按照標題分類。
要怎樣才能做到我的Radio選擇的值,每個標題裡的不互相影響呢?
而且我不同地方materialList和subList裡的物件數都是變動的,要怎樣做才能比較好達到效果呢?
這問題真的想破頭了,還煩請高手大大幫忙解惑><
不知道你要的結果是不是這樣,參考看看,是的話我再補充你問題點在哪
CodeSandbox
補充:
如果要使用 radio button 必須指定 name 這個屬性來區別是不是同一個類別
所以可以看到程式碼裡面,我將 input 裡面的 name 指定為你大標題的 id
就可以讓他們視為同一個類別囉!
有解答到你的話還請記得選擇最佳解答!