【发布时间】:2019-07-10 14:51:17
【问题描述】:
我正在尝试使用 React-Redux 制作一个简单的网站,以练习使用 React 和 Redux 并将它们连接起来。整个 HTML 只是一个 id="container" 的 div,用于从代码末尾的 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"));
我最终希望它成为一个 Markdown 预览器,但现在我希望它呈现一个我可以输入的文本区域,并且在幕后它应该更改 state 的输入属性,以便我以后可以访问它。相反,它什么也不渲染并抛出:
[object Error] {
framesToPop: 1,
name: "Invariant Violation"
}
【问题讨论】:
-
看起来
dispatch(this.props.submitUpdate(event));应该是this.props.submitUpdate(event); -
这也可能是真的,但改变并不能解决问题
标签: javascript reactjs redux react-redux