У меня есть приложение списка реактивных ответов, которое я пытаюсь понять, как работает избыточность.Я создал приложение для начинающих.
У меня проблема в том, что дочерний компонент ToDoList.jsx
не обновляется, когда dispatch
вызывается из другого файла, но mapStateToProps
вызывается и возвращает правильную информацию.Компонент просто не перерисовывается.
Описание приложения
Есть два компонента (кроме app.js), AddToList.jsx
, который имеет метку, которая отражает текстовое поле, икнопка, позволяющая добавлять объекты в массив списков дел.
Далее есть дочерний компонент с именем ToDoList.jsx
, который отображает массив элементов дел.
CodeSandbox
App.js
...
<div className="App">
<Provider store={store}>
<AddToList />
</Provider>
</div>
...
AddToList.jsx
...
<>
<input type="text" value={props.inputText} placeholder="To do item" onChange={props.inputChangeHandler}/>
<button type="button" onClick={props.addToListHandler}>Add To List</button>
<ToDoList />
</>
...
function mapStateToProps(state) {
return {
inputText: state.inputText
}
}
function mapDispatchToProps(dispatch) {
return {
inputChangeHandler: (evt) => {
const action = {type: 'INPUT_CHANGE', text: evt.target.text};
dispatch(action);
},
addToListHandler: () => {
const action = {type: 'ADD_TO_LIST'};
dispatch(action);
}
}
}
export default connect(
mapStateToProps,
mapDispatchToProps
)(AddToList);
ToDoList.jsx
import React from 'react';
import { connect } from 'react-redux';
const ToDoList = (props) => {
return (
<ul>
{props.toDoList.map((toDoItem, index) => {
return <li key={index}>{toDoItem}</li>
})}
</ul>
);
}
function mapStateToProps(state) {
console.log(state.toDoList);
// ******* Gets Called, and logs correct data **********
return {
toDoList: state.toDoList
};
}
export default connect(
mapStateToProps
)(ToDoList);