== Отредактировали вопрос, потому что, к сожалению, решения не сработали! ==
== Теперь я понял, что это потому, что мой Redux Store не обновляется правильно !! ==
Я пытаюсь построить проект в ReactJS с Redux, в котором есть хранилище Redux с периодическим обновлением состояния из выборки Axios.
Эта выборка Axios обновляет начальное состояние хранилища в порядке.
Я передаю состояние магазина как реквизиты для дочерних элементов родительского элемента.
Когда состояние хранилища меняется, если затрагивается Child, мне нужны реквизиты для передачи и повторного рендеринга Child.
Я думал, что если я отправлю реквизиты (которые установленыby mapStateToProps) для Child, и состояние изменилось, это повторно отправит реквизит и вызовет повторный рендеринг, но это не так.
Любые советы о правильном способе достижения того, что я 'Попытка была бы оценена.
Я консоль зарегистрировал реквизиты из метода componentDidMount родительского элемента, и я вижу обновление реквизита, как я ожидал;каждый раз, когда я вручную изменяю извлекаемый JSON, реквизиты меняются, чтобы отразить это.
Родительский элемент:
class Parent extends React.Component {
componentDidMount() {
this.props.updatePanels();
console.log(this.props);
this.interval = setInterval(() => {
this.props.updatePanels();
}, 5000);
}
componentWillUnmount() {
clearInterval(this.interval)
}
renderList() {
return this.props.panels.map((panel) => {
return (
<Child key={panel.id} lat={panel.lat} lng={panel.lng} />
);
});
}
render() {
return (
<div>
{this.renderList()}
</div>
);
}
}
Дочерний элемент:
const Child = props => (
<div key={props.id}>
<div>{props.lat}</div>
<div>{props.lng}</div>
</div>
)
Redux Action Creator
import panelFetch from '../dataCalls/panelFetch';
export const updatePanels = () => {
return async (dispatch) => {
const response = await panelFetch.get("/panelList.json");
console.log(response.data);
dispatch ({
type: 'UPDATE_PANELS',
payload: response.data
});
};
};
Панель обновления Redux Редуктор
export default (state = [], action) => {
switch (action.type) {
case 'UPDATE_PANELS':
return action.payload;
default:
return state;
}
};
ReduxРедукторы
import { combineReducers } from 'redux';
import updatePanelsReducer from './updatePanelsReducer'; //compartmentalise our reducer
const panelReducer = () => {
return [{
"id": 400016,
"lat": 51.509865,
"lng": -0.118092
}, {
"id": 400017,
"lat": 51.509865,
"lng": -0.118092
}, {
"id": 400018,
"lat": 51.509865,
"lng": -0.118092
}, {
"id": 400019,
"lat": 51.509865,
"lng": -0.118092
}
];
};
export default combineReducers({
panels: panelReducer,
updatePanels: updatePanelsReducer
});