LoginSignup
44
50

More than 1 year has passed since last update.

【React / Chakra-UI】CheckboxGroupでisChecked={true}をしてもチェックされていない

Last updated at Posted at 2022-06-19

個人的備忘録です。

やりたいこと

  • fetchしてきた配列データを、CheckboxGroupとして、Checkboxをmapで回して、checkedに一致したデータがあれば表示時にチェック状態にしたい
  • チェック済みかの情報は、query として渡す

環境

  • React: 17.0.2
  • Next: 11.1.3
  • @chakra-ui/react: ^1.8.5

調査

<CheckboxGroup value={checkedValueList}>
	<Checkbox value={item.value}>
</CheckboxGroup>
  • このやり方にすると、クリックしてもチェックが外れない

原因

  • そもそも、isChecked が props になかった

解決方法

  • useForm の reset を使って CheckboxGroup に設定されている変数へセットする

reset について

サンプルコード

import { ~~~ } from '@chakra-ui/react';
import { useEffect, useState } from 'react';
import { Controller, useForm } from 'react-hook-form';
import { Foo, FormInput } from './types';

interface Props = {
  isOpen;
  onClose;
  // query
  searchedFoo?: string[];
};

export const Modal = ({ isOpen, onClose, searchedFoo }: Props) => {
  // 省略

  const [foo, setFoo] = useState<Foo[]>();

  const { handleSubmit, control, reset } = useForm<FormInputData>();

  useEffect(() => {
    reset({
      foo: searchedFoo,
    });
  }, [reset, searchedFoo]);

  const onSubmit = (data: FormInputData) => {
    // 処理
  };

  return (
    <Modal isOpen={isOpen} onClose={onClose}>
      <ModalOverlay />
      <form onSubmit={handleSubmit(onSubmit)} noValidate>
        <ModalContent>
          <ModalHeader>
            <Text>Title</Text>
          </ModalHeader>
          <ModalCloseButton />
          <ModalBody className={styles.modal__search_body}>
            // 省略
            <FormControl>
                <FormLabel>
                  Foo
                </FormLabel>
                <Controller
                  name="foo"
                  control={control}
                  render={({ field }) => (
                    <CheckboxGroup {...field}>
                      <Box>
                        {foo &&
                          foo.map((item) => (
                            <Checkbox
                              value={item.code}
                              key={item.code}
                            >
                              {item.name}
                            </Checkbox>
                          ))}
                      </Box>
                    </CheckboxGroup>
                  )}
                />
              </FormControl>
          </ModalBody>

          <ModalFooter>
            <Box>
              <MwButton type={'submit'}>Submit</MwButton>
            </Box>
          </ModalFooter>
        </ModalContent>
      </form>
    </Modal>
  );
};
44
50
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
44
50