iT邦幫忙

0

React裡 雙層Array解出的object當作Radio選項單選的問題

  • 分享至 

  • xImage

如題,有一個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單選按鈕
大概長下面這樣:
https://ithelp.ithome.com.tw/upload/images/20220107/20139628pra0LsgXkR.png
我在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裡的物件數都是變動的,要怎樣做才能比較好達到效果呢?

這問題真的想破頭了,還煩請高手大大幫忙解惑><

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

2
Han
iT邦研究生 1 級 ‧ 2022-01-07 18:19:29
最佳解答

不知道你要的結果是不是這樣,參考看看,是的話我再補充你問題點在哪
CodeSandbox

補充:
如果要使用 radio button 必須指定 name 這個屬性來區別是不是同一個類別
所以可以看到程式碼裡面,我將 input 裡面的 name 指定為你大標題的 id
就可以讓他們視為同一個類別囉!

有解答到你的話還請記得選擇最佳解答!

samuraigo iT邦新手 4 級 ‧ 2022-01-07 19:09:59 檢舉

對耶!感謝大大,就是要這樣的效果!
請問是怎麼達成的呢,還是看不出個所以然><

Han iT邦研究生 1 級 ‧ 2022-01-07 22:42:15 檢舉

已補充~

samuraigo iT邦新手 4 級 ‧ 2022-01-08 18:49:21 檢舉

太感謝了!!
我真的超少在用name這個屬性的><,都忘記它的功用了,現在專案處理的東西太雜,好多這種基礎知識沒用都忘記了!
感謝大大指點!

我要發表回答

立即登入回答