Sto lavorando al mio primo progetto React/Redux e ho una piccola domanda. Ho letto la documentazione e ho visto le esercitazioni disponibili al numero https://egghead.io/lessons/javascript-redux-generating-containers-with-connect-from-react-redux-visibletodolist.React & Redux: connect() a più componenti e buone pratiche
Ma ho ancora una domanda. Si tratta di una pagina di accesso. quindi ho una di presentazione componente denominato LoginForm:
componenti/LoginForm.js
import { Component, PropTypes } from 'react'
class LoginForm extends Component {
render() {
return (
<div>
<form action="#" onSubmitLogin={(e) => this.handleSubmit(e)}>
<input type="text" ref={node => { this.login = node }} />
<input type="password" ref={node => { this.password = node }} />
<input type="submit" value="Login" />
</form>
</div>
)
}
handleSubmit(e) {
e.preventDefault();
this.props.onSubmitLogin(this.login.value, this.password.value);
}
}
LoginForm.propTypes = {
onSubmitLogin: PropTypes.func.isRequired
};
export default LoginForm;
E un componente contenitore denominato Accesso cui passano i dati al mio componente. Utilizzando reagire-redux-router, io chiamo questo contenitore (e non il componente presentationnal):
contenitori/Login.js
import { connect } from 'react-redux'
import { login } from '../actions/creators/userActionCreators'
import LoginForm from '../components/LoginForm'
const mapDispatchToProps = (dispatch) => {
return {
onSubmitLogin: (id, pass) => dispatch(login(id, pass))
}
};
export default connect(null, mapDispatchToProps)(LoginForm);
Come potete vedere, sto usando il metodo connect
fornire da redux per creare il mio contenitore.
La mia domanda è la seguente:
Se voglio che il mio contenitore login per usare viste multiple (ad esempio: LoginForm e ErrorList per visualizzare gli errori), ho bisogno di farlo a mano (senza collegamento, perché collegare take solo un argomento). Qualcosa di simile:
class Login extends Component {
render() {
return (
<div>
<errorList />
<LoginForm onSubmitLogin={ (id, pass) => dispatch(login(id, pass)) } />
</div>
)
}
}
È una cattiva pratica? È preferibile creare un altro componente di presentazione (LoginPage) che utilizza sia errorList che LoginForm e crea un contenitore (Login) che connect
in LoginPage?
EDIT: Se creo un terzo componente di presentazione (LoginPage), dovrò per passare i dati due volte. Così: Container -> LoginPage -> LoginForm & ErrorList
. Anche con contesto, non sembra essere la strada da percorrere.
Molto utile. Scusa per il ritardo, grazie! – Armelias