【问题标题】:Change background-image using React Hook使用 React Hook 更改背景图像
【发布时间】:2021-02-28 12:58:04
【问题描述】:

我是 React 新手,我正在使用 React Hook 构建我的 Web 应用程序。我想更改一个类的背景图像,这样如果窗口的宽度

这是我的代码:

Header.jsx

import React from "react"; 
import backgound_desktop from '../images/desktop/image-hero.jpg';

function Header(){
return(
    <div className="heading" style={{backgroundImage: "url(" + backgound_desktop + ")"}}>
        //Some other codes
    </div>
)}
export default Header;

App.jsx

import React from "react";
import Header from "./Header";
import backgound_desktop from '../images/desktop/image-hero.jpg';
import backgorund_mobile from "../images/mobile/image-hero.jpg";

function App() {

  const [windowWidth, setWindowWidth] = React.useState(window.innerWidth);

  React.useEffect(() => {
    const handleWindowResize = () => {
      setWindowWidth(window.innerWidth);
    }
    window.addEventListener('resize', handleWindowResize);
    return () => {
      window.removeEventListener('resize', handleWindowResize);
    }
  }, []);
  if (windowWidth < 376) {
    document.querySelector("heading").style.backgroundImage = "url(" + backgorund_mobile + ")";
  };
  return (
    <div className = "container-fluid nopadding" >
    <Header / >
    </div>
  )
}

export default App;

【问题讨论】:

  • 查看 useRef 挂钩。我正在使用移动设备或会举个例子。
  • 你能给我更多的细节吗?
  • 我猜你不需要 useRef。看这里。 itnext.io/…

标签: javascript css reactjs


【解决方案1】:

试试看

import React, {useState} from "react"; 
import backgound_desktop from './images/images-desk.webp';
import backgound_mobile from './images/images-phone.webp';

function Header(){

const [isMobile, setMobile] = useState(false) ;

    React.useEffect(() => {
        const handleWindowResize = () => {
            const bool =  window.innerWidth < 367 ? true : false;
            setMobile(bool) 
                
        }
        window.addEventListener('resize', handleWindowResize);
        return () => {
        window.removeEventListener('resize', handleWindowResize);
        }
    }, []);

    return(
        <div className="heading" style={{backgroundImage: "url(" +( isMobile? backgound_mobile : backgound_desktop) + ")", height: '400px'}}>
            //Some other codes
        </div>
    )

}


export default Header;

【讨论】:

  • 它不起作用。它使 2 backgroundImage 消失。
  • 现在可以查看了
  • 当我在外面测试它时,它可以工作,但是当我将它批准给我的代码时,它不会。我真的不知道为什么
  • 仔细检查可能是错误或遗漏了什么
  • 它显示了桌面图像,但是当它是
猜你喜欢
  • 1970-01-01
  • 2021-06-18
  • 2021-06-17
  • 2011-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多