Le code suivant devient l'avertissement:Est-ce que redux confuse réagit en détectant les composants "contrôlés" ou est-ce que je fais cela mal?
Warning: Filter is changing an uncontrolled input of type undefined to be controlled. Input elements should not switch from uncontrolled to controlled (or vice versa). Decide between using a controlled or uncontrolled input element for the lifetime of the component.
Filter.js:
import React from 'react';
import { connect } from 'react-redux';
class Filter extends React.Component {
constructor(props) {
super();
}
setFilter = (event) => {
let v = event.target.value
if (v.length === 0) v = null;
this.props.dispatch({
type: 'SET_FILTER',
filter: v
});
}
render() {
return (
<p>
<input id='filter' className='form-control' onChange={this.setFilter} value={this.props.state.filter} />
</p>
);
}
}
const mapStateToProps = (state, ownProps) => {
return {
state: state
}
}
const mapDispatchToProps = (dispatch, ownProps) => {
return {
dispatch: dispatch
}
}
Filter = connect(mapStateToProps, mapDispatchToProps)(Filter)
export default Filter
Je vais avoir du mal à voir comment cela différent de l'exemple de la documentation, sauf que j'utilise le Redux Etat.
<input type="text" value={this.state.value} onChange={this.handleChange} />
Mais je ne pouvais manquer quelque chose ...
Je crois que la valeur passée à 'value' ne devrait jamais être' null'. Donc 'this.props.state.filter || '' 'devrait être utilisé. En outre, vous devriez vraiment passer 'props' à' super() '. – Sulthan