Func <TObject, bool> или Предикат <TObject>?

Проблема здесь происходит потому, что вы пытаетесь получить 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 или ''.

8
задан Michael Smith 18 April 2009 в 23:42
поделиться

3 ответа

В 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 ...

7
ответ дан 5 December 2019 в 19:02
поделиться

Согласованность с остальной частью LINQ?

(«Аномалия» отмечалась, но с анонимными делегатами и Лямбда-функции не имеют значения, поэтому почти никогда не нужно осознавать разницу.)

2
ответ дан 5 December 2019 в 19:02
поделиться

Делегаты Func <> - это «новый» способ указания лямбда / делегатов для методов. Тем не менее, есть просто удобный набор делегатов, и если есть более конкретный делегат, который делает то же самое, то иди на это.

В твоем примере я всегда выбрал бы Предикат <>, так как он намного больше самодокументируется. (при условии, что вы хотите предикат)

0
ответ дан 5 December 2019 в 19:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: