Я не уверен в том, насколько далеко это предполагаемое поведение и в какой степени это ошибка пользователя;
Я инициализирую состояние dictionary
как пустой массив.
const [dictionary, setDictionary] = useState([]);
Запись в журнал консоли dictionary
возвращает мне пустой массив []
, а typeof dictionary
возвращает мне объект (почему?).
> []
length: 0
__proto__: Array(0)
> object
Массив в конечном итоге распространяется пользовательским вводом в форме
[
{
word: 'test',
definition: 'test'
}
]
Я использую React's propTypes
и проверяю целостность следующим образом:
Core.propTypes = {
dictionary: PropTypes.arrayOf(
PropTypes.objectOf(
PropTypes.shape({
definition: PropTypes.string,
word: PropTypes.string.isRequired
})
)
)
};
При начальном рендеринге я не получаю ошибки, но при добавлении первого элемента в массив, консоль говорит мне:
Warning: Failed prop type: Invalid prop `dictionary[0].word` of type `string` supplied
to `Core`, expected `object`.
При изменении параметра PropType на
WordRandom.propTypes = {
dictionary: PropTypes.arrayOf(
PropTypes.objectOf(
PropTypes.string.isRequired
)
)
};
добавление первого элемента не вызывает предупреждение. Разве мне не разрешено / разрешено проверять каждый элемент в объекте?
Никакое последующее добавление в массив не приводит к ошибке, поэтому мне интересно, если я что-то обманываю или это предполагаемое поведение, которое не материя?
РЕДАКТИРОВАТЬ: для уточнения:
setDictionary([...dictionary, { word, definition }]);
где слово и определение являются строками