Согласно вашей логике useEffect
и в зависимости от того, как вы инициализировали свой state
, вы должны сделать что-то вроде этого:
/*
Example for handling the on mount
initialization through props or `useState`
*/
const App = props => {
const [state] = useState(DEFAULT_INITIAL);
const companyRef = useRef(props.DEFAULT_INITIAL);
const myRef = useRef();
useEffect(() => {
if (
companyRef.current.companyId &&
DEFAULT_INITIAL.companyId &&
DEFAULT_INITIAL.companyId !== -1 &&
myRef.current
) {
myRef.current.focus();
}
}, []);
return <></>;
};
Это потому, что проверка вашего состояния "при монтировании"
useEffect(() => {
if (state.companyId !== undefined && state.companyId === -1) {
return;
}
}, [])
эквивалентно проверке начального значения useState
или с использованием ссылки при инициализации вашего состояния с помощью свойств.
И ссылка, инициализированная с помощью useRef
, не обязательно должна быть в массиве dep, поскольку существует только один их экземпляр на время жизни компонента.
![Изменить Q-58999058-useEffectExample](https: // codesandbox .io / static / img / play -codeandbox.svg )
См. FAQ по React:
Безопасно ли исключать функции из списка зависимостей? Вообще говоря, нет.
Если вы на 200% уверены, что линтер неправильный, React все равно предлагает вам исправить это.
Если вы все еще занимаетесь этим, вы можете просто отключить линт следующим образом:
useEffect(() => {
if (state.companyId !== undefined && state.companyId === -1) {
return;
}
// eslint-disable-next-line
}, [])
person
Dennis Vash
schedule
22.11.2019
ESLint
иFlowLanguageSupport
. Но это не те, которые выводят сообщения в моем сеансе терминала, не так ли? Я предполагал, что сообщения пришли из какого-то пакета, используемогоnpm start
. - person robertwerner_sf   schedule 23.11.2019