вызывать кастомные хуки условно реагировать - PullRequest
1 голос
/ 03 февраля 2020

Я определил пользовательский хук для выполнения некоторых операций и вызова некоторых API, как показано ниже

    const useCustomHook = (param1,param2) => {
      const response = callAPI(param1, param2 ){ .... }
       return [callAPI, response]
    }

, и я где-то использовал этот хук, и он также работает: например,

const [save ,response] = useCustomHook(param1,param2);

Но мне нужно вызвать save с различными параметрами в разных условиях: например:

if (type===1) 
    const [save ,response] = useCustomHook(param1,'a');
else 
    const [save ,response] = useCustomHook(param1,'b');

Однако, как вы знаете, хуки не могут вызывать условно, поэтому приведенный выше код не запустить.

Любые идеи приветствуются.

1 Ответ

0 голосов
/ 21 февраля 2020

У меня тоже была похожая проблема. Я вызывал пользовательский хук, который делает выборку API, и если пользовательский ввод изменился, мне нужно было вызвать его снова с другими параметрами, поэтому мне в основном требовались некоторые условия или другие аргументы с моим пользовательским хуком, который нарушает правила React-хука.

Я спас мою проблему другим подходом.

То, что вы можете попробовать, это вставить второй аргумент (в вашем случае «a» или «b») в опору «ключа» дочернего компонента, который будет принудительная перезагрузка компонента в случае изменения этой ключевой опоры.

например:

function ParentComponent() {

// logic of setting param2 based on type

/* You need to make sure keyprop changes as param2 changes. This would refresh ChildComponent and call customHook with new parameters */

return <ChildComponent key={keyprop} arg1={param1} arg2={param2} />
}

function ChildComponent(props) {
const [save ,response] = useCustomHook(props.arg1,props.arg2);

// do something with state

return (
/* ...display logic... */
)
}

Надеюсь, этот подход решит вашу проблему.

...