#reactjs #dynamic #react-hooks #use-effect #use-state
#reactjs #динамический #реагирующие крючки #использование-эффект #use-state
Вопрос:
Я пытаюсь загрузить изображение из выборки, выполненной с сервера. Изображения сохраняются в папке ресурсов на интерфейсе. В итоге я получаю: «Ошибка: не удается загрузить модуль ‘./’ » Я предполагаю, что это связано с тем, что состояние не заполняется при попытке вернуть HTML. Когда я загружаю только имя пути, это работает, но не при попытке загрузить img? Любая помощь программисту-самоучке была бы полезна.
export default function PlaceBids(props) {
const [quoteImage, setQuoteImage] = useState('')
useEffect(() => {
fetch('/api/bids?bids=' props.quoteNumber, {
credentials: 'same-origin',
})
.then(res => res.json())
.then((res) => {
if (res.loggedIn === false) {
return null
}
if (res.success) {
setQuoteImage(res.quoteImage)
}
else {
setQuoteImage(res.quoteImage)
}
}
)
}, [])
return (
<div>
<img src={require('../assets/models/' quoteImage)}/>
</div>
)
}
Комментарии:
1. Я вижу здесь две проблемы. 1) вы неправильно используете react. загрузите изображение также с помощью react js. прямо сейчас вы пытаетесь загрузить его непосредственно в HTML DOM, а не в react DOM. 2) из-за проблемы 1, когда вы завершаете вызов api и помещаете изображение в свои папки, никто не загружает изображение. получите компонент react для отображения изображения. проблема решена.
2. Привет, Джей, спасибо за твой ответ! В этом случае изображение уже сохранено в моих папках на интерфейсе, это просто путь, который загружается динамически. Похоже, что рендеринг происходит до вызова useEffect, а путь не существует.
3. верно, верно, я исправлен. я неправильно прочитал ваш вопрос. вы используете react правильно. мои извинения за то же самое. я все еще новичок в react, но, насколько я понимаю, здесь происходит два рендеринга, как обычно с react. сразу же происходит первый рендеринг, а затем происходит useeffect, вызывающий api и вызывающий изменение состояния, вызывающее второй рендеринг.
4. если у вас есть полное имя пути к изображению, зачем сохранять его в локальной папке? почему бы не использовать его напрямую? позвольте мне поместить код в блок ответов для вас.
Ответ №1:
Это то, что я бы попробовал.
//pass your api response to this
function ShowImage({ data }) {
return (
<div className="ShowImage">
<img src={data.quoteImage} alt={"showing image here from api "} />
</div>
);
}
Вот как я бы обработал простое отображение изображения в react JS. Если бы вы (или могли) поместить свой код в codesandbox или что-то в этом роде, возможно, я мог бы проверить, действительно ли это работает для вас.
по сути, поскольку я получаю полный URL-адрес изображения из API, я обхожу локальную папку.
Визуализация # 1
изображение будет отображаться, но изображения нет, поэтому он просто скажет «отображение изображения здесь в форме api».
затем useEffect вызовет API, и когда API завершится успешно, он инициирует изменение состояния и снова вызывает render, но на этот раз вы отправляете свой ответ API.
Визуализация # 2
Изображение отображается с использованием пути к изображению в data.quoteImage.
примечание: я предполагаю, что это простой случай отображения изображения, поскольку я тоже новичок. Однако, если это что-то гораздо более сложное, тогда другие члены сообщества смогут вам помочь.