onBlur и onChange влияют друг на друга

#javascript #reactjs #antd

#javascript #reactjs #antd

Вопрос:

 const SimpleChoiceItem = (props: Props) => {
  const { content, isSelected, onChange, onMove, onDelete, is_default } = props;
  const [isEdit, setIsEdit] = React.useState<boolean>(false);

  React.useEffect(() => {
    if (!isSelected) {
      setIsEdit(false)
    }
  }, [isSelected])

  return <div style={{ margin: '17px 0' }}>
    {
      isEdit ? <div style={{ display: 'flex', justifyContent: 'space-between', }} onBlur={() => {
        console.log('====onBlur===')
        setIsEdit(false)
      }}>
        <div style={{ flex: 1 }}>
          <Input value={content} onChange={e => onChange(e.target.value)} />
        </div>
        <div>
          <Checkbox value={is_default} onChange={e => {
            // When I click this element, I want to console the below words, But console the onBlur
            console.log('===Check box === onChange==')
          }}>默认</Checkbox>
          <ArrowUpOutlined style={{ marginLeft: '20px', cursor: 'pointer' }} onMouseDown={() => onMove('up')} />
          <ArrowDownOutlined style={{ marginLeft: '20px', cursor: 'pointer' }} onMouseDown={() => onMove('down')} />
          <CloseOutlined style={{ marginLeft: '20px', cursor: 'pointer' }} onMouseDown={() => onDelete()} />
        </div>
      </div> : <div onClick={() => setIsEdit(true)}>{content}</div>
    }
  </div>
}
 

<CheckBox /> является ли Antd компонентом https://ant.design/components/checkbox-cn /

Я хочу установить этот флажок, но консоль onBlur и IsEdit = false

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

1. На данный момент ваш вопрос довольно неясен.

Ответ №1:

Попробуйте предотвратить распространение по умолчанию и остановить распространение по флажку, чтобы событие не запускало другие элементы:

  <Checkbox value={is_default} onChange={e => {
    e.preventDefault();
    e.stopPropagation();
    console.log('===Check box === onChange==')
 }}>默认</Checkbox>
 

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

1. Мне это нравится, но это не влияет