reactjs - 使用条件渲染时不会调用图像标签上的 React onLoad 事件

标签 reactjs image onload react-hooks

我正在使用无状态功能组件在从外部资源加载图像时添加微调器,如下所示:

function ExternalImage(props) {
  const [loaded, setLoaded] = useState(false);
  function onLoad() {
    console.log('loaded');
    setLoaded(true);
  }
  return loaded
     ? <img 
        onLoad={onLoad}
        src={props.src}
        alt={props.alt}
        {...props} 
       /> 
     : <Spin />
}

并像这样使用它:
<ExternalImage src={image.src} alt={image.alt} className="image" />

为什么 onLoad 永远不会被调用?

最佳答案

未加载图像时,您实际上并未渲染图像。您需要渲染它以使其 onLoad 触发

function ExternalImage(props) {
  const [loaded, setLoaded] = useState(false);
  function onLoad() {
    console.log('loaded');
    setLoaded(true);
  }
  return (
    <>
        <img 
        style={{display: loaded? 'block': 'none'}}
        onLoad={onLoad}
        src={props.src}
        alt={props.alt}
        {...props} 
       /> 
       {!loaded && <Spin /> }
    </>
  )
}

关于reactjs - 使用条件渲染时不会调用图像标签上的 React onLoad 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57162865/

相关文章:

reactjs - 从嵌套类组件更改 React Context 中的值

javascript - 将多个操作传递给 bindActionCreators

javascript - 垂直可折叠面板 - 在加载时显示为折叠

javascript - chrome 过早触发 onload

javascript - EJS 在 JS onload 函数中访问 express 变量

reactjs - 使用 RecoilJS 通过 API 发布数据

javascript - 如何使用 React 正确更新数组中的状态?

c++ - 如何使用 C++ 开始对音频/视频流进行编程?

java - 如何从 Eclipse 项目中的 res 文件夹中获取文件?

jQuery UI 对话框向图像添加不需要的内联样式