Я пытаюсь создать простой сайт, использующий React-Redux, чтобы попрактиковаться в использовании React и Redux и соединить их.Весь HTML это просто div с id = "container" для получения конечного компонента из ReactDOM.render в конце кода.
// Redux
const defaultState = {
input: ""
}
const updateView = (event) => {
return {
type: "UPDATE",
input: event.target.value
}
}
const reducer = (state = defaultState, action) => {
switch(action.type) {
case "UPDATE":
return {
input: action.input
}
default:
return state
}
}
const store = Redux.createStore(reducer);
// React Redux
const connect = ReactRedux.connect;
const Provider = ReactRedux.Provider;
// React
class Presentational extends React.Component {
constructor(props) {
super(props);
this.handleChange = this.handleChange.bind(this);
}
handleChange(event) {
dispatch(this.props.submitUpdate(event));
}
render() {
return (
<div>
<textarea cols="40" rows="10" value={this.props.input} onChange={this.handleChange}/>
<div id="preview"></div>
</div>
)
}
}
const mapStateToProps = (state) => {
return {
input: state.input
}
}
const mapDispatchToProps = (dispatch) => {
return {
submitUpdate: function(event) {
dispatch(updateView(event));
}
}
}
const Container = connect(mapStateToProps, mapDispatchToProps)(Presentational);
class App extends React.Component {
constructor(props) {
super(props)
}
render() {
<Provider store={store}>
<Container/>
</Provider>
}
}
ReactDOM.render(<App />, document.getElementById("container"));
В конце концов я хочу, чтобы это стало средством предварительного просмотра уценки, носейчас я ожидаю, что он отобразит текстовую область, которую я смогу ввести, и за кулисами он должен изменить свойство ввода состояния, чтобы я мог получить к нему доступ позже.Вместо этого он ничего не рендерит и выдает:
[object Error] {
framesToPop: 1,
name: "Invariant Violation"
}