когда я реализовывал Redux в моем проекте Gatsby , я увидел, что мой компонент не выполняет рендеринг при изменении состояния компонента (и да, я лечил состояниекак неизменяемый).
Поэтому я использовал пример Conuter от Redux и скопировал его код в мой проект Gatsby. И проблема снова возникла, компонент не может повторно выполнить рендеринг при изменении состояния (используя один из примеров Redux!).
Только с помощью this.forceUpdate()
я смог получить компонент повторного рендерингапри изменении состояния, и когда я удалил эту строку, он перестал перерисовывать при изменении состояния.
Это созданная мной страница Gatsby и код Redux, в который я скопировал:
import React, { Component } from 'react'
import { createStore } from 'redux'
class Counter extends Component {
constructor(props) {
super(props);
}
render() {
console.log("render - start",JSON.stringify(store.getState(),null,2))
const { value, onIncrement, onDecrement } = this.props
return (
<p>
Clicked: {value} times
{' '}
<button onClick={onIncrement}>
+
</button>
{' '}
<button onClick={onDecrement}>
-
</button>
</p>
)
}
}
const counter = (state = 0, action) => {
console.log("reducer - start: ",state, JSON.stringify(action,null,2))
switch (action.type) {
case 'INCREMENT':
return state + 1
case 'DECREMENT':
return state - 1
default:
return state
}
}
const store = createStore(counter)
class TestPage extends React.Component {
render(){
return (
<Counter
value={store.getState()}
onIncrement={() => {
store.dispatch({ type: 'INCREMENT' })
// this.forceUpdate()
}}
onDecrement={() => store.dispatch({ type: 'DECREMENT' })}
/>)
}
}
export default TestPage