React Hook : 외부 함수 내부 상태에 대한 액세스

데릭 라슨

React 앱에서 일련의 비동기 호출을 시작한 다음 해당 호출이 실행될 때 사용할 수있는 상태를 변경할 수있는 기능을 갖고 싶습니다. 예를 들어, 사용자가 백그라운드에서 실행되고 몇 분이 소요될 수있는 5 개의 데이터 파일 검색을 시작하도록 허용하지만 프로세스를 중단하거나 총 파일 수를 줄일 수있는 옵션을 제공합니다.

다음은 그것이 어떻게 보일 수 있는지에 대한 아이디어입니다. 그러나 불행히도이 패턴은 작동하지 않는 것 같습니다.

function App() {
  const [halt, setHalt] = useState(false);

  return (
      ...
      <button onClick={() => longProcess(halt)}>Start</button>
      <button onClick={() => setHalt(true)}>Stop</button>
      ...
  );
}

async function longProcess(halt) {
  for (const fileid of files_to_get) {
    // For example, halt if the user clicks the Stop button during execution
    if (halt) break;
    await getDataFile(fileid);
  }
}

이상적으로는 순수한 기능적 구성 요소를 사용하고 비동기 기능을 여러 구성 요소에서 사용할 수 있도록 허용하고 싶습니다. 그래서 저는 전반적으로 React Hooks를 사용하고 있습니다. 나는 세 가지 해결책을 생각해 냈지만 그중 어느 것도 법안에 맞지 않습니다.

  • 클래스 구성 요소를 사용하면 this.state비동기 적으로 업데이트됩니다.
    • 단점 : 기능적 구성 요소가 아니라 비동기 기능이 구성 요소에 연결됨
  • useRef()이다 제안 옵션
    • 단점 : 우리는 더 이상 다시 렌더링하지 않으며 이것이 일반적인 useRef 패턴입니까?
  • useState에서 setter를 전달하고 호출 할 때 현재 값을 검색 할 함수를 전달합니다.
    • 단점 : 매우 해키 보인다 :)

세 번째 예제와 비슷한 깨끗한 방법이 있는지 궁금합니다. 제한된 React 경험에서 만난 적이 없습니다. 다른 제안도 환영합니다!

Alvaro

재사용 가능한 기능을 갖기 위해 후크 내부에 정의합니다.

다음 제안은 useState기능을 실행하는 데 사용 됩니다. useState값이 변경되면 렌더링을 트리거 해야 합니다. 이 값은 내부에서 함수를 호출합니다 useEffect.

또한 useRef프로세스가 시작되고 나중에 실행 중에 변경 될 수있는 값을 읽을 수 있도록 사용합니다 .

const App = () => {
    const { startProcess, stopProcess } = useLongProcess();

    return (
        <Fragment>
            <button onClick={startProcess}>Start</button>
            <button onClick={stopProcess}>Stop</button>
        </Fragment>
    );
};

const useLongProcess = () => {
    const stop = useRef(false);
    const [start_process, setStartProcess] = useState(false);

    useEffect(() => {
        if (!start_process) {
            return;
        }

        const longProcess = async () => {
            for (const fileid of files_to_get) {
                if (stop.current) break;
                await getDataFile(fileid);
            }
        };

        longProcess();
    }, [start_process]);

    return {
        startProcess: () => setStartProcess(true),
        stopProcess: () => {
            stop.current = true;
        }
    };
};

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

내부 클래스 인터페이스 상수에 대한 Java 외부 클래스 액세스

분류에서Dev

내부 클래스 인터페이스 상수에 대한 Java 외부 클래스 액세스

분류에서Dev

react-select의 내부 입력 요소에 대한 액세스

분류에서Dev

localhost에 대한 MySQL 외부 액세스

분류에서Dev

내부 상태를 위해 useState를 사용한 React Hook 테스트

분류에서Dev

외부 클래스 중첩 열거에 대한 내부 클래스 액세스

분류에서Dev

내부 프로세스가 "외부에 액세스"할 수 없도록 디렉터리 권한 설정

분류에서Dev

React Component 내부 함수에서 소품에 액세스 할 수 없습니다.

분류에서Dev

외부에서 함수 내에서 함수 정의에 액세스

분류에서Dev

TS TypeScript SetInterval-타이머 대상 함수 내부에서 함수에 액세스 할 수 없습니다.

분류에서Dev

TreeNode 변수 파일에 대한 C # 액세스 treeView 외부에서 CreationTime

분류에서Dev

내부 개체에 대한 액세스 권한을 부여하지만 외부 수정을 방지 하시겠습니까?

분류에서Dev

for 루프 내의 함수 외부에서 변수 (객체)에 액세스

분류에서Dev

함수 (Javascript) 내부에있는 배열의 각 요소에 대한 액세스 권한 얻기

분류에서Dev

내부 함수는 변경 후 외부 함수 변수에 액세스 할 수 없습니다.

분류에서Dev

클래스 및 함수 외부의 변수에 액세스

분류에서Dev

Swift 함수 외부에서 변수에 액세스

분류에서Dev

함수 외부에서 개체 변수에 액세스

분류에서Dev

opencv 콜백 함수 외부에서 변수에 액세스

분류에서Dev

함수 외부에서 jQuery 변수에 액세스

분류에서Dev

함수 외부에서 jQuery 변수에 액세스

분류에서Dev

노드의 함수 외부에서 변수에 액세스

분류에서Dev

함수 외부에서 변수에 액세스합니까?

분류에서Dev

AS3 : 함수 외부에서 변수에 액세스

분류에서Dev

Python 3-생성자 내에서 'self'변수에 대한 외부 액세스 권한을 부여하는 것이 합법적입니까?

분류에서Dev

함수 외부의 지역 변수에 액세스

분류에서Dev

함수 외부의 지역 변수에 액세스

분류에서Dev

함수 외부의 변수에 액세스-신속

분류에서Dev

홈 레일스 서버에 대한 외부 액세스

Related 관련 기사

  1. 1

    내부 클래스 인터페이스 상수에 대한 Java 외부 클래스 액세스

  2. 2

    내부 클래스 인터페이스 상수에 대한 Java 외부 클래스 액세스

  3. 3

    react-select의 내부 입력 요소에 대한 액세스

  4. 4

    localhost에 대한 MySQL 외부 액세스

  5. 5

    내부 상태를 위해 useState를 사용한 React Hook 테스트

  6. 6

    외부 클래스 중첩 열거에 대한 내부 클래스 액세스

  7. 7

    내부 프로세스가 "외부에 액세스"할 수 없도록 디렉터리 권한 설정

  8. 8

    React Component 내부 함수에서 소품에 액세스 할 수 없습니다.

  9. 9

    외부에서 함수 내에서 함수 정의에 액세스

  10. 10

    TS TypeScript SetInterval-타이머 대상 함수 내부에서 함수에 액세스 할 수 없습니다.

  11. 11

    TreeNode 변수 파일에 대한 C # 액세스 treeView 외부에서 CreationTime

  12. 12

    내부 개체에 대한 액세스 권한을 부여하지만 외부 수정을 방지 하시겠습니까?

  13. 13

    for 루프 내의 함수 외부에서 변수 (객체)에 액세스

  14. 14

    함수 (Javascript) 내부에있는 배열의 각 요소에 대한 액세스 권한 얻기

  15. 15

    내부 함수는 변경 후 외부 함수 변수에 액세스 할 수 없습니다.

  16. 16

    클래스 및 함수 외부의 변수에 액세스

  17. 17

    Swift 함수 외부에서 변수에 액세스

  18. 18

    함수 외부에서 개체 변수에 액세스

  19. 19

    opencv 콜백 함수 외부에서 변수에 액세스

  20. 20

    함수 외부에서 jQuery 변수에 액세스

  21. 21

    함수 외부에서 jQuery 변수에 액세스

  22. 22

    노드의 함수 외부에서 변수에 액세스

  23. 23

    함수 외부에서 변수에 액세스합니까?

  24. 24

    AS3 : 함수 외부에서 변수에 액세스

  25. 25

    Python 3-생성자 내에서 'self'변수에 대한 외부 액세스 권한을 부여하는 것이 합법적입니까?

  26. 26

    함수 외부의 지역 변수에 액세스

  27. 27

    함수 외부의 지역 변수에 액세스

  28. 28

    함수 외부의 변수에 액세스-신속

  29. 29

    홈 레일스 서버에 대한 외부 액세스

뜨겁다태그

보관