Progettazione di applicazioni di semplice reazione

3

Ho un'app molto semplice che ti consente di accedere e quindi di visualizzare un dashboard. Il processo di progettazione con React e Redux è molto semplice:

  • Ho due componenti React: Login e Dashboard
  • Memorizzo un booleano isAuthenticated nel mio albero di stato

Ora alcune osservazioni:

  • Il componente Login può essere visto solo se isAuthenticated è falso
  • Il componente Dashboard può essere visto solo se isAuthenticated è true
  • Un pulsante nei set di componenti di accesso è Autenticazione su true
  • Un pulsante nel set di componenti del dashboard è Autenticazione su falso

Come dovrei implementarlo in React? Ci sono almeno due possibilità:

  • utilizzando il routing: / reindirizza a / login se autenticato o / dashboard in caso contrario. Inoltre / login reindirizza a / dashboard se autenticato e / dashboard reindirizza a / login se non autenticato
  • presenta un componente App che esegue il rendering di Login o Dashboard a seconda di isAuthenticated

Ecco l'implementazione della seconda proposta:

const Login = (props) => (
  <div className="login">
    <p>Login page</p>
    <input type="button" value="Log in" onClick={props.toggleAuthentication}/>
  </div>
)
const Dashboard = (props) => (
  <div className="dashboard">
    <p>Dashboard page</p>
    <input type="button" value="Log out" onClick={props.toggleAuthentication}/>
  </div>
)
class App extends React.Component {
  constructor(props){
    super(props)
    this.state = {isAuthenticated: false}
  }
  toggleAuthentication(){
    this.setState({isAuthenticated: !this.state.isAuthenticated})
  }
  render() {
    if(!this.state.isAuthenticated){
      return <Login toggleAuthentication={()=>this.toggleAuthentication()}/>
    } else {
    return <Dashboard toggleAuthentication={()=>this.toggleAuthentication()}/>
    }
  }
}
ReactDOM.render(
  <App />,
  document.getElementById('root')
);
    
posta vanna 11.02.2016 - 10:48
fonte

2 risposte

1

Penso che il modo in cui reagire-router generalmente preferito sia avere un hook onEnter che controlla se sei loggato. Se non lo sei, verrai reindirizzato a Login.

L'ho fatto personalmente nel modo in cui descrivevi il secondo modo e, mentre funzionava, conteneva alcune informazioni sulla struttura dell'URL su un utente non autenticato.

Se non stai utilizzando il router di reazione, potresti voler utilizzare il tuo secondo approccio. Se stai utilizzando react-router, dai un'occhiata al loro esempio di flusso di autenticazione:

link

    
risposta data 08.05.2016 - 22:57
fonte
-2

L'approccio onEnter() suggerito da @dannyid sembra semplice ed efficiente, sebbene non l'abbia mai provato sin d'ora.

Recentemente mi sono imbattuto in questo fantastico articolo, descrivendo un altro modo di implementare l'autenticazione con componenti di ordine superiore: link

    
risposta data 23.05.2016 - 11:19
fonte

Leggi altre domande sui tag