#javascript #reactjs #react-typescript
#javascript #reactjs #реагировать-typescript
Вопрос:
У меня возникли проблемы с пониманием, почему я не могу заставить изображения отображаться в моих компонентах. У меня есть логическое значение, которое указывает на загрузку, и массив, который заполняется асинхронно. Когда я заканчиваю, я устанавливаю логическое значение, и компонент повторно отображает. Теперь я хочу создать карту для каждого элемента в массиве и поместить в колоду карт (это из react-bootstrap, если это не было очевидно). Я могу сделать это с любым заданным логическим значением и массивом, но не с логическим значением и массивами, созданными с помощью React.useState
… Почему это так и как я должен это исправить?
Я столкнулся с этой проблемой несколько часов назад и отследил ее источник до этого минимального рабочего примера, который все еще отражает то, что я пытаюсь сделать, но я не уверен, что делать дальше.
function TestCard() {
return (
<Card>
<Card.Img src="holder.js/200x200" />
</Card>
);
}
Я пытаюсь отобразить следующий компонент:
function MainComponent() {
const [boolState, setBoolState] = React.useState(false);
const [arrayState, setArrayState] = React.useState([]);
React.useEffect(() => {
setTimeout(() => {
setBoolState(true);
setArrayState([1,2,3]);
}, 2000);
});
return (
<>
{/* This works */}
{
true amp;amp;
<CardDeck>
{
[1,2,3].map(_ => {
return (
<TestCard />
);
})
}
</CardDeck>
}
{/* This doesn't, why? */}
{
boolState amp;amp;
<CardDeck>
{
arrayState.map(_ => {
return (
<TestCard />
);
})
}
</CardDeck>
}
</>
);
}
Комментарии:
1. я попробовал вашу логику в своем коде моделирования. нет проблем. можете ли вы установить точку останова в devtools и устранить неполадки, выполняется ли повторный рендеринг компонента при выполнении setBoolState и setArrayState
2. Код (без изображения), похоже, отлично работает здесь, в codesandbox . Что такое
holder.js
? Возможно, если вы обновите свой вопрос своим реальным кодом и проблемой, мы сможем лучше помочь вам.3. @DrewReese Это дословно мой код. Я сделал
create-react-app
,npm install holderjs
иimport holderjs
вверху. Holderjs — это инструмент для заполнения изображений. Я исправил код так, как он выглядит с моей стороны в вашей изолированной среде, вот ответвление. Похоже, это не работает?4. @KevinMoeMyintMyat Это определенно попадает в оператор return после setStates. Я проверил это с помощью ReactDevTools в chrome. Вы можете увидеть живой пример в code sandbox.
5. Возможно, это поможет: github.com/imsky/holder/issues/225 Кажется, есть проблема с использованием holderjs и жизненного цикла компонента react.