Вы должны использовать форму обратного вызова setState
:
this.setState((state, props) => ({
...state
items: [...state.items, { id, eventName, time, data, owner }]
})
Эта версия вычисляет следующее состояние на основе текущего состояния - не на основе состояния в начале функции рендеринга, которое может быть «устаревшие» - и поэтому безопасно делать несколько обновлений таким образом.
Вы можете использовать List (T) .AsReadOnly ()
:
return this.mylist.AsReadOnly()
, который вернет ReadOnlyCollection
.
Просто используйте класс ReadOnlyCollection, он поддерживается начиная с .NET 2.0
Используйте общий класс ReadOnlyCollection ( Collection.AsReadOnly ()
). Он не копирует какие-либо объекты, которые могут иметь странные результаты при изменении базовой коллекции.
var foo = new List<int> { 3, 1, 2 };
var bar = foo.AsReadOnly();
foreach (var x in bar) Console.WriteLine(x);
foo.Sort();
foreach (var x in bar) Console.WriteLine(x);
Но если вам не нужна копия, это лучшее решение.
Я предпочитаю возвращать IEnumerable, но вам не нужно приводить. Просто выполните
public IEnumerable<string> StringList { get { return myList; }
List
- это IEnumerable