【发布时间】:2019-07-16 03:46:55
【问题描述】:
我创建了一个简单的 react redux 应用。 在 Google chrome react 开发工具中,我检查了“突出显示更新”。然后单击任何显示所有组件已更新的按钮,但“AddButton”中的控制台消息不显示任何内容。 错误控制台,反应开发工具还是我?
// index.js
import React from "react";
import ReactDOM from "react-dom";
import App from "./App";
import { Provider } from "react-redux";
import { createStore } from "redux";
const reduser = (state = [], action) => {
switch (action.type) {
case "ADD_ITEM":
return [...state, { text: action.text }];
case "REMOVE_ITEM":
return state.filter(t => t.text !== action.text);
default:
return state;
}
};
const store = createStore(
reduser,
window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
);
ReactDOM.render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById("root")
);
//App.js
import React, { Component } from "react";
import AddButton from "./comps/AddButton";
import ListContainer from "./comps/ListContainer";
class App extends Component {
render() {
return (
<div className="App">
<h1>Simple app</h1>
<AddButton />
<ListContainer />
</div>
);
}
}
export default App;
//comps/AddButton.js
import React, { Component } from "react";
import { connect } from "react-redux";
const addItem = () => ({ type: "ADD_ITEM", text: Date.now() });
class AddButton extends Component {
componentDidUpdate(prevProps, prevState, snapshot) {
console.log("Update");
}
render() {
return <button onClick={this.props.addItem}>add button</button>;
}
}
export default connect(
null,
{ addItem }
)(AddButton);
//comps/ListContainer.js
import React, { Component } from "react";
import { connect } from "react-redux";
import ListItem from "./ListItem";
class ListContainer extends Component {
render() {
return (
<ul>
{this.props.items.map(t => (
<ListItem key={t.text} text={t.text} />
))}
</ul>
);
}
}
const mapStateToProps = state => {
return { items: state };
};
export default connect(mapStateToProps)(ListContainer);
//comps/ListItem.js
import React from "react";
import { connect } from "react-redux";
const removeItem = text => ({ type: "REMOVE_ITEM", text });
const ListItem = props => {
return (
<li>
<button onClick={() => props.removeItem(props.text)}>{props.text}</button>
</li>
);
};
export default connect(
null,
{ removeItem }
)(ListItem);
Lorem ipsum dolor sit amet,consectetur adipisicing elit。 Asperiores corporis culpa deleniti dolore dolores eaque eligendi eum fugit in, itaque iusto maiores natus nostrum placeat quisquam similique tempore veniam voluptatum。
【问题讨论】:
-
AddButton 可能永远不会更新,因此永远不会调用 componentDidUpdate。尝试将其移入:ComponentDidMount 或 getDerivedStateFromProps 取决于您的要求。据我所知,它是 ListContainer 组件,应该在按钮单击时更新。
-
我会尽量理解它是如何工作的,以进一步调试。如果 react highlight 是假的,那意味着需要找到其他东西。
标签: javascript reactjs redux react-redux