有人能告诉我为什么<ThemeSecontext.供应商>标签在更改主题时会进行调整,但三个.js组件(<Box/>和<Cube/>)不要?

Box.jsx:

import { useFrame, useThree } from "@react-three/fiber";
import React, { useContext, useEffect } from "react";
import { useRef } from "react";
import { angleToRadians } from "../../../utils/angle";
import * as THREE from "three";
import { themes, ThemeContext } from "../../../utils/Theme";

export default function Box(){
   
    const orbitControlsRef = useRef(null);
    useFrame((state) => {
        if (orbitControlsRef.current) {
            const { x, y } = state.mouse;
            orbitControlsRef.current.setAzimuthalAngle(-x * angleToRadians(45));
            orbitControlsRef.current.setPolarAngle((y+ 1.5) * angleToRadians(90 - 30));
            orbitControlsRef.current.update();
        }

    })
const q = window.innerWidth;
const canvas = document.querySelector('.canvas');
var deviceAngle = 0;
if(window.matchMedia("(pointer: coarse)").matches) {
    canvas.setAttribute('style', 'pointer-events: none;');
    deviceAngle = 50;
}
else{
    deviceAngle = 160;

}
const theme = useContext(ThemeContext);


    return (
        <>
         <PerspectiveCamera makeDefault position={[0, 0, 7]} fov={90} />
              <OrbitControls ref={orbitControlsRef} minPolarAngle={angleToRadians(20)} maxPolarAngle={angleToRadians(deviceAngle)} enableDamping enabled={false}/>

           
        {/* <OrbitControls /> */}
        <mesh position={[0,0,0]} rotation={[0,0,0]}>
            <torusBufferGeometry attach={'geometry'} args={[5,2,70,100]} />
            <MeshDistortMaterial
            wireframeLinecap wireframeLinejoin 
            attach="material" 
            wireframe
            speed={0.4}
            distort={0.46}
            color={theme.pLight}/>
        </mesh>
        <fog attach="fog" color={theme.secondary} near={5} far={7.5} position={[0,0,0]}/>
        <mesh position={[0,0,0]}>
        <pointLight color={theme.cta} intensity={0.3} position={[0,0,1]} />
        <ambientLight color={theme.secondary} intensity={0.5} />
        </mesh>
        </>
    )
} 
`

App.jsx:

在这里,我导入一个包含主题的主题对象,并将ThemeSecontext设置为当前主题.这发生在标记为-+-的注释行.

import Box from "./components/three/box/Box";
import { Html, useProgress} from "@react-three/drei"
import { Canvas } from "@react-three/fiber"
import Cursor from "./components/cursor/Cursor";
import Welcome from "./components/welcome/Welcome";
import Socials from "./components/socials/Socials";
import Scroll from "./components/scroll_indicator/Scroll";
import About from "./components/about/About";
import { OrbitControls } from "@react-three/drei";
import {
  EffectComposer,
  Bloom,
  Glitch,
  Scanline
} from "@react-three/postprocessing";
import { BlendFunction, Resizer, KernelSize, GlitchMode } from 'postprocessing'
import Section from "./components/ux/section/Section";
import { Suspense, createContext, useContext } from "react";
import BottomBar from "./components/ux/bottom_bar/BottomBar";
import ProgressBar from "./components/ux/progress_bar/ProgressBar";
import Skills from "./components/skills/Skills";
import Projects from "./components/projects/Projects";
import Logo from "./components/ux/logo/Logo";
import ModeSwitch from "./components/ux/light_dark_mode/ModeSwitch";
import {themes, ThemeContext} from './utils/Theme'
import { useEffect } from "react";
function Loader() {
  const { progress } = useProgress()
  return <Html center>{progress} % loaded</Html>
}


export default function App() {
  const theme = useContext(ThemeContext);

/* -------------------+-------------- */

  var currentTheme= themes.light;
  document.body.style.backgroundColor = currentTheme.primary;
  document.body.style.color = currentTheme.text;
  return (
    
       <ThemeContext.Provider value={currentTheme}>
    {/* <Logo/> */}
    <ModeSwitch/>
    <BottomBar/>
    <Scroll/>
<Welcome/>
<Socials/>
      <Canvas className="canvas"
      > 

            <Suspense fallback={<Loader/>}>
          <EffectComposer multisampling={0} disableNormalPass={true} >
          
      </EffectComposer>
      <Box />
      
      <OrbitControls enabled={false}/>
        </Suspense>
      </Canvas>
      <Section content={<About/>} id={'about'}/>
      <Section content={<Skills/>}/>
      <Section content={<Projects/>} id={'projects'}/>
      </ThemeContext.Provider>
 
  );
 
}

推荐答案

好吧,我已经找到答案了!上下文提供程序无法将值传递到元素中.我重新申报了<;ThemeSecontext.供应商>;在画布标签里面,它也起作用了!

Javascript相关问答推荐

有没有方法在Angular中的bowser选项卡之间移动HTML?

在JavaScript中打开和关闭弹出窗口

Vue Quill css仅应用于我的第一个Quill Editor组件+如何自定义工具栏

foreach循环中的Typescript字符串索引

我不知道为什么我的JavaScript没有验证我的表单

每次子路由重定向都会调用父加载器函数

Rehype将hashtag呈现为URL

WebGL 2.0无符号整数输入变量

当Redux提供程序访问Reduxstore 时,可以安全地从Redux提供程序外部调用钩子?

在react JS中映射数组对象的嵌套数据

如何在输入元素中附加一个属性为checkbox?

如何避免页面第一次加载时由于CSS样式通过JavaScript更改而出现闪烁

我正在建立一个基于文本的游戏在react ,我是从JS转换.我怎样才能使变量变呢?

rxjs插入延迟数据

WhatsApp Cloud API上载问题:由于MIME类型不正确而导致接收&Quot;INVALID_REQUEST";错误

用于在路径之间移动图像的查询

TypeError:无法读取未定义的属性(正在读取';宽度';)

更改agGRID/Reaction中的单元格格式

用另一个带有类名的div包装元素

MongoDB通过数字或字符串过滤列表