Переключайте несколько кнопок по отдельности внутри таблицы react

#reactjs

Вопрос:

Неактивное Состояние:
Неактивное Состояние

Активное Состояние:
Активное Состояние

Когда я переключаю одну кнопку, состояние всех остальных кнопок меняется, чего я не хочу. Есть ли какой-либо способ контролировать состояние этих переключателей по отдельности

Это мой код для столбцов, которые будут использоваться в таблице:

 const COLUMNS = useMemo (() => [
      {
    Header: "Username",
    accessor: "Username",
    textAlign: "left",
    sortable: false,
    },
    {
    Header: "Status",
      accessor: "Status",
      textAlign: "center",
      Cell: ({ value, cell: { row } }) => (
        <div>
        <FormControlLabel
          control={
            <IOSSwitch
              checked={status}
              onClick={toggler}
              name="status"
            />
          }
          />
          
          {status ? <span>Active</span> : <span>Inactive</span>}
         
          </div>
      ),
    },
 

Это мой код для таблицы:

 <Table {...getTableProps()}>
              <thead>
                {headerGroups.map((headerGroup) => (
                  <tr {...headerGroup.getHeaderGroupProps()}>
                    {headerGroup.headers.map((column) => (
                      <Th
                        {...column.getHeaderProps({
                          style: { textAlign: column.textAlign },
                        })}
                      >
                        {column.render("Header")}
                      </Th>
                    ))}
                  </tr>
                ))}
              </thead>
              <tbody {...getTableBodyProps()}>
                {page.map((row) => {
                  prepareRow(row);
                  return (
                    <Tr {...row.getRowProps()}>
                      {row.cells.map((cell) => {
                        return (
                          <Td
                            {...cell.getCellProps({
                              style: { textAlign: cell.column.textAlign },
                            })}
                          >
                            {cell.render("Cell")}
                          </Td>
                        );
                      })}
                    </Tr>
                  );
                })}
              </tbody>
            </Table>
 

Комментарии:

1. пожалуйста, покажите свой код. Не изображение

2. Я отредактировал его и вставил код

Ответ №1:

Вы должны назначить каждой кнопке ее отдельное состояние, например, у вас может быть три состояния для трех кнопок.

ваши штаты должны выглядеть так:

 const [firstButton, setFirstButton] = useState(false)
const [secondButton, setSecondButton] = useState(false)
const [thirdButton, setThirdButton] = useState(false)
 

и в своих кликах вы должны сказать:

например, для второй кнопки:

 onClick={()=>setSecondButton(false)}
 

и когда вы хотите использовать это состояние в своей таблице, вы должны сопоставлять каждую кнопку с ее состоянием

ps: если ваше количество кнопок не исправлено, вы должны написать функцию, чтобы вернуть объект, ключи которого являются именами кнопок, а значения-ложными ( значение по умолчанию-ложь, и это должно изменяться при щелчках ).

Из-за неизменности состояний в react.js, вы должны клонировать состояние и изменить то, что вы хотите, а все остальное оставить как есть, а затем обновить все состояние.

и используйте его, как:

 onClick={()=>setButtonsState({...buttonsState, secondButton:false})}
 

где buttonState-это как:

 const [buttonsState, setButtonsState] = useState(
{
  firstButton: false,
  secondButton: false,
  thirdButton: false
}
)
 

Комментарии:

1. Я действительно новичок в реагировании и не знаю, как применять такого рода логику (все еще изучаю состояния). Я отредактировал сообщение и вставил код

2. @ShalikhShab где меняется ваше состояние?