Потому что вы передаете в
this.setState тот же массив.
Обновляйте так:
addGroup = () => {
this.setState(prevState => ({ items : [ ...prevState.items, undefined ] }));
};
И уберите
bind из
render. В моем примере
class field arrow function, ее биндить не надо.
Метод
shouldComponentUpdate можно изменить так:
shouldComponentUpdate( nextProps, nextState ) {
return nextState.items !== this.state.Items;
}
Если такой проверки мало, можно изменить так:
shouldComponentUpdate( nextProps, nextState ) {
return nextState.items !== this.state.Items &&
JSON.stringify(nextState.items.sort()) !== JSON.stringify(this.state.items.sort());
}
Если массив заменен, то пройдет приведение к строке и сравнение строк и если массивы разные вернется
true и компонент обновится. Можно для сравнения использовать
_.isEqual().
Но в большинстве случаев достаточно первого варианта с неглубоким сравнением.