繁体   English   中英

使用 react 将 url 获取到图像 src

[英]Get url into image src using react

我正在尝试从 api 调用中获取结果并将其放入图像的 src 中,例如<img className="card-img-top" src={loadImage(result.token_id)} alt={result.token_id} />

我使用then(response => console.log(response.image_preview_url))从承诺中得到正确的图像 src url,在控制台中完全没有问题。

我的问题是我无法弄清楚它是如何从那里注入 src 的。

这是我正在使用的相关代码:

async function loadImage(token_id) {
  return new Promise((resolve, reject) => {
    const options = { method: 'GET' };
    const osstuff = fetch(
      'https://api.opensea.io/api/v1/asset/0xd782abhdgc76h6ljgfdedhhhhg6fcfhf17da/' +
        token_id +
        '/?include_orders=false',
      options
    )
      .then((response) => response.json())
      .then((response) => console.log(response.image_preview_url))
      .catch((err) => console.error(err));
  });
}

return (
  <div className='App' style={{ background: 'black' }}>
    <div className='container'>
      <div className='row'>
        <div className='row items mt-3'>
          <div
            className='ml-3 mr-3'
            style={{
              display: 'inline-grid',
              gridTemplateColumns: 'repeat(4, 5fr)',
              columnGap: '10px',
            }}
          >
            {nftdata.map((result, i) => {
              return (
                <div className='card mt-3' key={i}>
                  <div className='image-over'>
                    <img
                      className='card-img-top'
                      src={loadImage(result.token_id)}
                      alt={result.token_id}
                    />
                  </div>
                  <div className='card-caption col-12 p-0'>
                    <div className='card-body'>
                      <h5 className='mb-0'>NFT #{result.token_id}</h5>
                      <h5 className='mb-0 mt-2'>
                        Location Status<p>{result.owner_of}</p>
                      </h5>
                      <div className='card-bottom d-flex justify-content-between'></div>
                    </div>
                  </div>
                </div>
              );
            })}
          </div>
        </div>
      </div>
    </div>
  </div>
);

您有两种方法可以处理此问题:

#1使用您的方法,您可以将响应作为 url 从您的函数返回:

async function loadImage(token_id) {
     const options = {method: 'GET'};    
     const response = await fetch('https://api.opensea.io/api/v1/asset/0xc782ab25dac76565d3fdede36fcf87227c9217da/'+token_id+'/?include_orders=false', options);

     return response.image_preview_url;
 }

#2 第二种方法是事先获取 URL 并将其存储在数组中或设置在同一对象中。

function fetchAllImageUrls(){    // Call this in useEffect(fetchAllImageUrls, nftdata)
    const newNftdata = nftdata.map((result, i )=> {
        return {
            ...result,
            image_preview_url: loadImage(result.token_id)
        };
    });
    setNftData(newNftdata);
}
async function loadImage(token_id) {
    
     const options = {method: 'GET'};    
     const response = await fetch('https://api.opensea.io/api/v1/asset/0xc782ab25dac76565d3fdede36fcf87227c9217da/'+token_id+'/?include_orders=false', options);
     return response.image_preview_url;
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM