React - 해당 종속성을 종료합니다!
                                            
                                                
                                                
                                                
                                                
                                                
                                                 22781 단어  webdevprogrammingreactjavascript
                    
(일반적인) 문제
구성 요소가 있고 해당 상태를 제어해야 하며 잘 작동합니다.
function BaseExample() {
  const [option, setOption] = useState('two');
  const handleChange = (el) => {
    setOption(el.target.value);
  };
  return (
    <div>
      <select
        onChange={handleChange}
        value={option}
      >
        {[
          { value: 'one', label: 'One' },
          { value: 'two', label: 'Two' },
          { value: 'three', label: 'Three' },
        ].map((option) => (
          <option
            key={option.value}
            value={option.value}
          >
            {option.label}
          </option>
        ))}
      </select>
      <div>{option ? `Selected: ${option}` : 'No selection'}</div>
    </div>
  );
}
하지만 리팩토링을 시도하면 어떻게 될까요?
function RefactoredExample() {
  const [option, setOption] = useState('two');
  const handleChange = (el) => {
    setOption(el.target.value);
  };
  return (
    <div>
      {SelectComponent(handleChange, option)}
      <div>{option ? `Selected: ${option}` : 'No selection'}</div>
    </div>
  );
}
function SelectComponent(handleChange, option) {
  return (
    <select
      onChange={handleChange}
      value={option}
    >
      {[
        { value: 'one', label: 'One' },
        { value: 'two', label: 'Two' },
        { value: 'three', label: 'Three' },
      ].map((option) => (
        <option
          key={option.value}
          value={option.value}
        >
          {option.label}
        </option>
      ))}
    </select>
  );
}
이제 너무 많은 것을 알아야 하는 구성 요소와 자체적으로 아무것도 할 수 없는 다른 구성 요소가 있습니다.
사용자 지정 후크 입력
규칙에 따라 일반적인 기능 구성 요소는 JSX를 반환하고 사용자 정의 후크는 무엇이든 반환할 수 있습니다.
아무것? 예, JSX도 있습니다.
function RefactoredWithHookExample() {
  const { option, SelectComponent } = useSelectComponent();
  return (
    <div>
      <SelectComponent />
      <div>{option ? `Selected: ${option}` : 'No selection'}</div>
    </div>
  );
}
function useSelectComponent() {
  const [option, setOption] = useState('two');
  const handleChange = (el) => {
    setOption(el.target.value);
  };
  const SelectComponent = () => (
    <select
      onChange={handleChange}
      value={option}
    >
      {[
        { value: 'one', label: 'One' },
        { value: 'two', label: 'Two' },
        { value: 'three', label: 'Three' },
      ].map((option) => (
        <option
          key={option.value}
          value={option.value}
        >
          {option.label}
        </option>
      ))}
    </select>
  );
  return { option, SelectComponent };
}
이제 SelectComponent는 상태를 제어하는 데 필요한 모든 것을 알고 있으며 부모 구성 요소는 필요한 것만 알고 있습니다.
무엇이든 클로저와 함께 진행됩니다!
이와 같은 예는 거의 흥미롭지 않지만 후크에서 무엇이든 반환할 수 있음을 기억하십시오!
뿐만 아니라 이것은 클로저로 작동할 수 있으므로 다음과 같은 것을 가질 수 있습니다.
function RefactoredWithClosureHookExample() {
  const { option, SelectComponent } = useSelectComponent({
    options: [
      { value: 'one', label: 'One' },
      { value: 'two', label: 'Two' },
      { value: 'three', label: 'Three' },
    ],
    initial: 'two',
  });
  return (
    <div>
      <SelectComponent
        selectProps={{ style: { color: 'red' } }}
        optionProps={{ style: { color: 'green' } }}
      />
      <div>{option ? `Selected: ${option}` : 'No selection'}</div>
    </div>
  );
}
function useSelectComponent({ options, initial }) {
  const [option, setOption] = useState(initial);
  const handleChange = (el) => {
    setOption(el.target.value);
  };
  const SelectComponent = ({ selectProps, optionProps }) => (
    <select
      onChange={handleChange}
      value={option}
      {...selectProps}
    >
      {options.map((option) => (
        <option
          key={option.value}
          value={option.value}
          {...optionProps}
        >
          {option.label}
        </option>
      ))}
    </select>
  );
  return { option, SelectComponent };
}
물론 이것은 과장이었다. 그러나 무엇이 가능한지 이해하면 문제에 대한 더 쉬운 해결책을 찾을 수 있을 것입니다.
표지 사진 작성자: Jamie Matociños on Unsplash
Reference
이 문제에 관하여(React - 해당 종속성을 종료합니다!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/noriller/react-closure-that-dependency-a50텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)