Скажем, у меня был простой inputfieldcomponent так:Несколько экземпляров компонента не должны разделять состояние
import React, {PropTypes, PureComponent} from 'react';
import {render} from 'react-dom';
import {connect} from 'react-redux';
import updateInput from '../../actions/inputActions';
require('./SimpleInput.sass');
export class SimpleInput extends PureComponent {
constructor(props, context) {
super(props, context);
}
handleChange (event) {
this.props.updateField(event.target.value);
}
renderField() {
return (
<input type="text" value={this.props.value || ''} onChange={this::this.handleChange} placeholder={this.props.initial_value}/>
)
}
render() {
return(
<span>
{this.renderField()}
</span>
)
}
}
const mapStateToProps = (state) => {
return {value: state.value.value}
}
const mapDispatchToProps = (dispatch) => {
return {
updateInput: (value) => dispatch(updateInput(value))
};
};
AddressInput.propTypes = {
initial_value: PropTypes.string
};
AddressInput.defaultProps = {
initial_value: "What's the value?"
};
export default connect(mapStateToProps, mapDispatchToProps)(SimpleInput);
тогда я сделать два экземпляра:
</SimpleInput initial_value='blah'/>
</SimpleInput>
Однако при этом оказывается, любой обновление в одно из двух полей обновляет оба из них (из-за сокращения, допускающего только одно состояние).
Что такое канонический способ решения этой проблемы?
Не ставьте состояние, которое не должно использоваться совместно с Redux. Redux следует использовать для состояния, о котором должны знать другие части приложения. Если вы должны это сделать, сопоставьте уникальный идентификатор с каждым экземпляром компонента (иначе это переходное состояние). –