Специальная проверка подлинности

#reactjs #react-native

#reactjs #react-native

Вопрос:

Я пытаюсь немного узнать о Firebase, а также создать свои собственные HOC. С этой целью я попытался создать HOC withAuth , который создает новый prop uid . Это делается для того, чтобы я всегда мог переносить ссылку на пользователя через компоненты моего приложения.

HOC работает нормально, и я могу успешно передавать другим компонентам его новое значение prop, но у меня возникли небольшие проблемы с пониманием побочного эффекта.

Для тех компонентов, которые оборачиваются моей проверкой подлинности HOC, при первом рендеринге, если я пытаюсь наблюдать uid с помощью простого console.log , это всегда null происходит при первом рендеринге (за которым следует заполненное значение).

Мне интересно, является ли это нормальным поведением с учетом жизненного цикла? И если да, есть ли способ, которым я могу бороться с этим.

 import React from 'react';
import auth from '@react-native-firebase/auth';


export default withAuth = (WrappedComponent) => {
  class withAuth extends React.Component {

  state = {
    uid: null 
  }

  componentWillMount() {
    auth().signInAnonymously()
    auth().onAuthStateChanged(user => 
      this.setState({uid: user.uid})
    ) 
  }

  render(){      
    const newProps = { 
      uid: this.state.uid,  
      ...this.props 
    }; 
    return (
      <WrappedComponent {...newProps}/>
    )
  }
}
return withAuth; 
 

}

Ответ №1:

В вашем примере вы используете компонент класса и начинаете с null явной установки состояния, поэтому вы видите null значение.

Я бы рекомендовал отказаться от компонента класса HOC, поскольку это более старая практика. Рекомендуемой стратегией здесь было бы использование перехватов и контекста.

Не волнуйтесь, если вы не очень знакомы с этими понятиями. Поскольку они являются рекомендуемой стратегией, вы найдете много материалов для чтения и руководств о том, как настроить Firebase с помощью React hooks и контекста. Вот 2 отличные статьи, которые помогут вам начать:

Я также рекомендую прочитать введение к перехватам в официальных документах React.