Проблема здесь происходит потому, что вы пытаетесь получить textCount
из state
. Однако в вашем штате нет ключа с именем textCount
.
Это то, что вы делаете.
const { textCount } = this.state;
Это значит.
const textCount = this.state.textCount;
Что возвращает вас неопределенным, потому что у вашего объекта состояния нет этого ключа.
Затем вы пытаетесь получить значение ключа с именем Nancy101
из объекта undefined
, поэтому вы получаете эту ошибку.
Вы можете исправить это, добавив textCount
в ваше начальное состояние внутри конструктора, как это.
constructor(props) {
super(props);
this.state = {
data: [],
message: '',
textCount: {},
};
Вместо того, чтобы быть здесь неопределенным const {textCount} = this.state;
, теперь у вас есть объект. {}
Также вы можете обновить эту строку.
`var count = textCount[senderId] == undefined ? 1 : textCount[senderId] + 1;`
К этому.
`let count = !textCount[senderId] ? 1 : textCount[senderId] + 1;`
с этим !textCount[senderId]
он проверит ваши данные, которые равны 0
, undefined
или ''
.
В LINQ Func
используется для таких вещей, как где
, так что другая перегрузка, которая принимает индекс и элемент, является согласованной:
IEnumerable<T> Where(IEnumerable<T> source, Func<T, bool> predicate)
IEnumerable<T> Where(IEnumerable<T> source, Func<T, int, bool> predicate)
Лично я думаю, что имя Predicate
является более описательным, поэтому I будет использовать его в ситуациях, когда нет проблемы согласованности, как описано выше. Имейте в виду, что нужно сказать только то, что нужно знать только о типах делегатов Action
и Func
...
Согласованность с остальной частью LINQ?
(«Аномалия» отмечалась, но с анонимными делегатами и Лямбда-функции не имеют значения, поэтому почти никогда не нужно осознавать разницу.)
Делегаты Func <> - это «новый» способ указания лямбда / делегатов для методов. Тем не менее, есть просто удобный набор делегатов, и если есть более конкретный делегат, который делает то же самое, то иди на это.
В твоем примере я всегда выбрал бы Предикат <>, так как он намного больше самодокументируется. (при условии, что вы хотите предикат)