Reactã®å®éšçAPI `experimental_Offscreen` ãæ¢æ±ããŸããã³ã³ããŒãã³ããããã¯ã°ã©ãŠã³ãã§ã¬ã³ããªã³ã°ããããã©ãŒãã³ã¹ãæé©åãããã®åŒ·åãªæ©èœã®å®è£ ãšæŽ»çšæ³ãåŠã³ãŸãããã
React experimental_Offscreenã¬ã³ããªã³ã°ãšã³ãžã³ïŒããã¯ã°ã©ãŠã³ãåŠçã«ããããã©ãŒãã³ã¹åäž
é²åãç¶ããWebéçºã®äžçã«ãããŠãããã©ãŒãã³ã¹ã¯æãéèŠã§ãããŠãŒã¶ãŒã¯é«éã§å¿çæ§ã®é«ãã¢ããªã±ãŒã·ã§ã³ãæåŸ
ããŠãããããããªé
å»¶ã§ããã©ã¹ãã¬ãŒã·ã§ã³ãé¢è±ã«ã€ãªããå¯èœæ§ããããŸãããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãæ§ç¯ããããã®æã人æ°ã®ããJavaScriptã©ã€ãã©ãªã®1ã€ã§ããReactã¯ãéçºè
ãã¢ããªã±ãŒã·ã§ã³ãæé©åããããã®ããŒã«ãæäŸããããã«åžžã«åªåããŠããŸããexperimental_Offscreen
APIã¯ãã®ãããªããŒã«ã®1ã€ã§ãããããã¯ã°ã©ãŠã³ãã¬ã³ããªã³ã°ãå¯èœã«ããããšã§ããã©ãŒãã³ã¹ãåäžãããããã«èšèšããã匷åãªæ©èœã§ãã
ãªãã¹ã¯ãªãŒã³ã¬ã³ããªã³ã°ã®å¿ èŠæ§ãçè§£ãã
experimental_Offscreen
ã®è©³çްã«å
¥ãåã«ãããã解決ããããšããŠããåé¡ãçè§£ããŸããããåŸæ¥ãReactã¯ã³ã³ããŒãã³ãããªã³ããã³ãã§ãéåžžã¯ãã¥ãŒããŒãã«è¡šç€ºããããšããpropsã倿Žããããšãã«ã¬ã³ããªã³ã°ããŸãããã®ã¢ãããŒãã¯å€ãã®ã¢ããªã±ãŒã·ã§ã³ã§ããŸãæ©èœããŸãããè€éãªã³ã³ããŒãã³ããããŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ã«è¿
éã«å¿çããŠã³ã³ããŒãã³ããã¬ã³ããªã³ã°ããå¿
èŠãããã·ããªãªã§ã¯ãããã«ããã¯ã«ãªãå¯èœæ§ããããŸãã以äžã®äŸãèããŠã¿ãŠãã ããïŒ
- è€éãªããã·ã¥ããŒãïŒ ããã·ã¥ããŒãã«ã¯ãè€æ°ã®ãã£ãŒããããŒãã«ãã€ã³ã¿ã©ã¯ãã£ããªèŠçŽ ãå«ãŸããŠããããšããããããŸããããããã¹ãŠã®ã³ã³ããŒãã³ããåæã«ã¬ã³ããªã³ã°ãããšãèšç®ã³ã¹ããé«ããªããåæèªã¿èŸŒã¿æéãé ããªã£ãããã€ã³ã¿ã©ã¯ã·ã§ã³ãéããªã£ããããå¯èœæ§ããããŸããäžçäžã®åžå ŽïŒäŸïŒæ±äº¬ããã³ãã³ããã¥ãŒãšãŒã¯ïŒããã®ãªã¢ã«ã¿ã€ã æ ªäŸ¡ããŒã¿ã衚瀺ããéèããã·ã¥ããŒããæ³åããŠã¿ãŠãã ãããåãã£ãŒãã¯ããªãã®åŠçãå¿ èŠãšããŸãã
- ããã²ãŒã·ã§ã³ã®ãã©ã³ãžã·ã§ã³ïŒ ã¢ããªã±ãŒã·ã§ã³ã®ç°ãªãããŒãžãã»ã¯ã·ã§ã³éã®ãã©ã³ãžã·ã§ã³ã¯ãæ°ããã³ã³ãã³ãã®ã¬ã³ããªã³ã°ã«æéãããããšãããã¡ãªãæããããããšããããŸãããªãã¹ã¯ãªãŒã³ã¬ã³ããªã³ã°ã䜿çšãããšã次ã®ç»é¢ãããã¯ã°ã©ãŠã³ãã§äºåã«ã¬ã³ããªã³ã°ã§ããããããã©ã³ãžã·ã§ã³ãç¬æã«æããããŸãããŠãŒã¶ãŒãæ çšã確èªããŠããéã«ãæ è¡äºçŽãµã€ãã確èªããŒãžãã¬ã³ããªã³ã°ããŠããæ§åãèããŠã¿ãŠãã ããã
- é衚瀺ãŸãã¯åæç¶æ ã§é衚瀺ã®ã³ã³ããŒãã³ãïŒ æåã¯é衚瀺ã«ãªã£ãŠããã³ã³ããŒãã³ãïŒäŸïŒã¿ããã¢ãŒãã«ãã¢ã³ãŒãã£ãªã³å ïŒã§ããæçµçã«è¡šç€ºãããéã«ã¯ããªãã®ã¬ã³ããªã³ã°æéãå¿ èŠã«ãªãå ŽåããããŸãããããã®ã³ã³ããŒãã³ããããã¯ã°ã©ãŠã³ãã§ã¬ã³ããªã³ã°ããããšã§ããŠãŒã¶ãŒãå¿ èŠãšãããšãã«ããã«å©çšã§ããç¶æ ãä¿èšŒããŸããã¿ãã®åŸãã«è£œå説æãé ãããŠããeã³ããŒã¹ãµã€ããèããŠã¿ãŠãã ããã
- ããŒã¿éçŽåã¢ããªã±ãŒã·ã§ã³ïŒ ç§åŠçã·ãã¥ã¬ãŒã·ã§ã³ãããŒã¿å¯èŠåããŒã«ãªã©ã倧éã®ããŒã¿ãåŠçã»è¡šç€ºããã¢ããªã±ãŒã·ã§ã³ã¯ããªãã¹ã¯ãªãŒã³ã¬ã³ããªã³ã°ãã倧ããªæ©æµãåããããšãã§ããŸããããã¯ã°ã©ãŠã³ãã§ããŒã¿ãäºåèšç®ã»ã¬ã³ããªã³ã°ããããšã§ãããã¹ã ãŒãºãªãŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ãšé«éãªå¿çæéãå®çŸã§ããŸããé«è§£å床ã®è¡æç»åã衚瀺ããå°å³ã¢ããªã±ãŒã·ã§ã³ãèããŠã¿ãŠãã ããã
ãããã®ã·ããªãªã«ãããŠãexperimental_Offscreen
ã¯ã¬ã³ããªã³ã°ã¿ã¹ã¯ãããã¯ã°ã©ãŠã³ãã«å§è²ããã¡ã€ã³ã¹ã¬ãããè§£æŸããŠã¢ããªã±ãŒã·ã§ã³å
šäœã®å¿çæ§ãåäžãããæ¹æ³ãæäŸããŸãã
React experimental_Offscreenã®ç޹ä»
experimental_Offscreen
APIã¯ããã®åã®éããçŸåšReactã®å®éšçãªæ©èœã§ããããã¯ããŸã å®å®ããŠãããšã¯èŠãªãããŠãããããã®APIã¯å°æ¥ã®ãªãªãŒã¹ã§å€æŽãããå¯èœæ§ãããããšãæå³ããŸããããããããã¯Reactã®ããã©ãŒãã³ã¹æé©åã®æªæ¥ãå£éèŠããéçºè
ããã®æ©èœã詊ãããšãå¯èœã«ããŸãã
experimental_Offscreen
ã®æ žãšãªãã¢ã€ãã¢ã¯ãReactãã³ã³ããŒãã³ããå¥ã®ãåé¢ãããã¬ã³ããªã³ã°ã³ã³ããã¹ãã§ã¬ã³ããªã³ã°ã§ããããã«ããããšã§ããããã«ãããã¬ã³ããªã³ã°ããã»ã¹ãã¡ã€ã³ã¹ã¬ããããããã¯ããããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ã®å¿çæ§ãç¶æãããŸããã¬ã³ããªã³ã°ãããã³ã³ãã³ãã¯ãå¿
èŠã«å¿ããŠè¿
éã«è¡šç€ºã§ããŸãã
ããã¯ãæçã®ææãäºåã«æºåãããããªãã®ã ãšèããŠãã ãããéèãåã£ãããã¹ãã€ã¹ãèšéããããšãã£ãäœæ¥ãããã¯ã°ã©ãŠã³ãã§è¡ã£ãŠããã°ã調çãããšãã«é å»¶ãªãçŽ æ©ãæçãçµã¿ç«ãŠãããšãã§ããŸãã
experimental_Offscreenã®ä»çµã¿
experimental_Offscreen
APIã¯<Offscreen>
ãšããã³ã³ããŒãã³ããæäŸããŸãããã®ã³ã³ããŒãã³ãã¯ãããã¯ã°ã©ãŠã³ãã§ã¬ã³ããªã³ã°ãããã³ã³ãã³ãã®ã³ã³ãããšããŠæ©èœããŸãã以äžã«åºæ¬çãªäŸã瀺ããŸãïŒ
import { experimental_Offscreen as Offscreen } from 'react';
function MyComponent() {
return (
<>
<p>Some content on the screen.</p>
<Offscreen mode="visible"> {/* or 'hidden' */}
<ExpensiveComponent />
</Offscreen>
</>
);
}
ãã®äŸã§ã¯ã<ExpensiveComponent />
ã¯<Offscreen>
ã³ã³ããŒãã³ãå
ã§ã¬ã³ããªã³ã°ãããŸããmode
ããããã£ã¯ãã³ã³ãã³ãããã€ãã©ã®ããã«ã¬ã³ããªã³ã°ãããããå¶åŸ¡ããŸããããŸããŸãªã¢ãŒããèŠãŠãããŸãããïŒ
Offscreenã®ã¢ãŒã
'visible'
: ãã®ã¢ãŒãã§ã¯ã<Offscreen>
ã³ã³ããŒãã³ãå ã®ã³ã³ãã³ãã¯ãéåžžã®Reactã³ã³ããŒãã³ããšåæ§ã«å³åº§ã«ã¬ã³ããªã³ã°ãããŸããããããReactã¯ä»ã®ã¿ã¹ã¯ãåªå ããããšã§ã¬ã³ããªã³ã°ããã»ã¹ãæé©åã§ããŸããããã§ã®äž»ãªå©ç¹ã¯ãReactãã¢ã€ãã«æéãå©çšããŠã³ã³ããŒãã³ããæºåã§ããããšã§ãã'hidden'
: ããã§éæ³ãèµ·ãããŸãã'hidden'
ã¢ãŒãã§ã¯ã<Offscreen>
ã³ã³ããŒãã³ãå ã®ã³ã³ãã³ãã¯ããã¯ã°ã©ãŠã³ãã§ã¬ã³ããªã³ã°ãããŸããããã¯ãã¬ã³ããªã³ã°ããã»ã¹ãã¡ã€ã³ã¹ã¬ããããããã¯ããããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ã®å¿çæ§ãç¶æãããããšãæå³ããŸããã¬ã³ããªã³ã°ãããã³ã³ãã³ãã¯ãã£ãã·ã¥ããã<Offscreen>
ã³ã³ããŒãã³ãã衚瀺ãããããã«ãªã£ããšãã«è¿ éã«è¡šç€ºã§ããŸãã
render
ããããã£ã«ã€ããŠ
experimental_Offscreen
APIèªäœã«çŽæ¥å«ãŸããããã§ã¯ãããŸããããrender
ããããã£ããŸãã¯`useMemo`ã`useCallback`ã`React.memo`ãšçµã¿åãããŠäœ¿çšããããã¯ããŒã¹ã®ã¢ãããŒãã¯ã<Offscreen>
ã³ã³ããŒãã³ãå
ã®ã³ã³ããŒãã³ãã®ã¬ã³ããªã³ã°ãæé©åããããã«éèŠã§ããReact.memo
ã䜿çšããããšã§ã<ExpensiveComponent />
ã®propsã倿ŽãããŠããªãå Žåã«äžèŠãªåã¬ã³ããªã³ã°ãé²ãããšãã§ããŸããäŸãã°ïŒ
import React, { experimental_Offscreen as Offscreen, useMemo } from 'react';
const ExpensiveComponent = React.memo(function ExpensiveComponent(props) {
// Expensive rendering logic here
return <div>{props.data}</div>;
});
function MyComponent({ data }) {
const expensiveComponent = useMemo(() => <ExpensiveComponent data={data} />, [data]);
return (
<>
<p>Some content on the screen.</p>
<Offscreen mode="hidden">
{expensiveComponent}
</Offscreen>
</>
);
}
ãã®äŸã§ã¯ã芪ã³ã³ããŒãã³ããåã¬ã³ããªã³ã°ãããŠããExpensiveComponent
ã¯data
ããããã£ã倿Žããããšãã«ã®ã¿åã¬ã³ããªã³ã°ãããŸãããããOffscreen
ãšçµã¿åãããããšã§ãäžèŠãªã¬ã³ããªã³ã°ã®ãªãŒããŒãããã倧å¹
ã«åæžã§ããŸãã
experimental_Offscreenã®å®è£ ïŒå®è·µçãªäŸ
experimental_Offscreen
ã䜿çšããŠãå®éã®ã·ããªãªã§ããã©ãŒãã³ã¹ãåäžãããããã®å®è·µçãªäŸãããã€ãèŠãŠã¿ãŸãããã
äŸ1ïŒã¿ãããã«ã®äºåã¬ã³ããªã³ã°
è€æ°ã®ã¿ãããããããããã«ç°ãªãã³ã³ãã³ããå«ãŸããŠããã¢ããªã±ãŒã·ã§ã³ãæ³åããŠãã ããããŠãŒã¶ãŒãã¿ããåãæ¿ãããšãæ°ããã¿ãã®ã³ã³ãã³ããã¬ã³ããªã³ã°ãããéã«é¡èãªé
å»¶ãçºçããå¯èœæ§ããããŸããexperimental_Offscreen
ã䜿çšããŠãéã¢ã¯ãã£ããªã¿ãã®ã³ã³ãã³ããããã¯ã°ã©ãŠã³ãã§äºåã«ã¬ã³ããªã³ã°ã§ããŸãã
import React, { useState, experimental_Offscreen as Offscreen } from 'react';
function TabPanel({ content }) {
return <div>{content}</div>;
}
function MyTabs() {
const [activeTab, setActiveTab] = useState(0);
const tabs = [
{ id: 0, label: 'Tab 1', content: <TabPanel content={<ExpensiveComponent data="Data for Tab 1"/>} /> },
{ id: 1, label: 'Tab 2', content: <TabPanel content={<ExpensiveComponent data="Data for Tab 2"/>} /> },
{ id: 2, label: 'Tab 3', content: <TabPanel content={<ExpensiveComponent data="Data for Tab 3"/>} /> },
];
return (
<div>
<ul>
{tabs.map((tab) => (
<li key={tab.id} onClick={() => setActiveTab(tab.id)}>
{tab.label}
</li>
))}
</ul>
{tabs.map((tab) => (
<Offscreen key={tab.id} mode={activeTab === tab.id ? 'visible' : 'hidden'}>
{tab.content}
</Offscreen>
))}
</div>
);
}
ãã®äŸã§ã¯ãã¢ã¯ãã£ããªã¿ãã®ã³ã³ãã³ãã®ã¿ã'visible'
ã¢ãŒãã§ã¬ã³ããªã³ã°ãããéã¢ã¯ãã£ããªã¿ãã®ã³ã³ãã³ãã¯'hidden'
ã¢ãŒãã§ã¬ã³ããªã³ã°ãããŸããããã«ãããéã¢ã¯ãã£ããªã¿ãã®ã³ã³ãã³ããããã¯ã°ã©ãŠã³ãã§äºåã«ã¬ã³ããªã³ã°ãããã¿ãéã®åãæ¿ããã¯ããã«ã¹ã ãŒãºã«ãªããŸãã
äŸ2ïŒããã²ãŒã·ã§ã³ã®ãã©ã³ãžã·ã§ã³ã®æé©å
åè¿°ã®ããã«ãããã²ãŒã·ã§ã³ã®ãã©ã³ãžã·ã§ã³ã¯ã次ã®ç»é¢ãããã¯ã°ã©ãŠã³ãã§äºåã«ã¬ã³ããªã³ã°ããããšã§æ¹åã§ããŸããããã¯ãexperimental_Offscreen
ãReact Routerã®ãããªã«ãŒãã£ã³ã°ã©ã€ãã©ãªãšçµã¿åãããŠå®çŸã§ããŸãã
import React, { experimental_Offscreen as Offscreen } from 'react';
import { BrowserRouter as Router, Route, Link } from 'react-router-dom';
function Home() {
return <div>Home Page</div>;
}
function About() {
return <div>About Page</div>;
}
function App() {
return (
<Router>
<nav>
<ul>
<li><Link to="/">Home</Link></li>
<li><Link to="/about">About</Link></li>
</ul>
</nav>
<Route path="/" exact><Home /></Route>
<Route path="/about">
<Offscreen mode="hidden"><About /></Offscreen>
</Route>
</Router>
);
}
ãã®ç°¡ç¥åãããäŸã§ã¯ã<About />
ã³ã³ããŒãã³ãã¯mode="hidden"
ãæã€<Offscreen>
ã³ã³ããŒãã³ãã§ã©ãããããŠããŸããããã«ããããŠãŒã¶ãŒãããŒã ããŒãžã«ããéã«AboutããŒãžãããã¯ã°ã©ãŠã³ãã§äºåã«ã¬ã³ããªã³ã°ãããŸãããŠãŒã¶ãŒããAboutããªã³ã¯ãã¯ãªãã¯ãããšãã³ã³ãã³ãã¯ãã§ã«ã¬ã³ããªã³ã°ãããŠããããããã©ã³ãžã·ã§ã³ãã¯ããã«é«éã«ãªããŸãã
äŸ3ïŒOffscreenã䜿çšããæ¡ä»¶ä»ãã¬ã³ããªã³ã°
ç¹å®ã®æ¡ä»¶äžïŒäŸïŒãŠãŒã¶ãŒã®æäœåŸãAPIããååŸããããŒã¿ã«åºã¥ããªã©ïŒã§ã®ã¿ã¬ã³ããªã³ã°ãããã³ã³ããŒãã³ããããå ŽåããããŸããOffscreen
ã䜿çšããŠãããã®ã³ã³ããŒãã³ããããã¯ã°ã©ãŠã³ãã§æºåããæ¡ä»¶ãæºãããããšãã«ããã«å©çšã§ããããã«ããããšãã§ããŸãã
import React, { useState, useEffect, experimental_Offscreen as Offscreen } from 'react';
function MyConditionalComponent() {
const [data, setData] = useState(null);
useEffect(() => {
// Simulate fetching data from an API
setTimeout(() => {
setData({ message: 'Data fetched successfully!' });
}, 2000);
}, []);
return (
<div>
{data ? (
<p>{data.message}</p>
) : (
<p>Loading data...</p>
)}
</div>
);
}
function App() {
const [showComponent, setShowComponent] = useState(false);
return (
<div>
<button onClick={() => setShowComponent(true)}>Show Component</button>
<Offscreen mode={showComponent ? 'visible' : 'hidden'}>
<MyConditionalComponent />
</Offscreen>
</div>
);
}
ãã®äŸã§ã¯ãMyConditionalComponent
ã¯showComponent
ã®ç¶æ
ãtrue
ã®ãšãã«ã®ã¿ã¬ã³ããªã³ã°ãããŸããããããæåã«mode="hidden"
ãæã€<Offscreen>
ã³ã³ããŒãã³ãã§ã©ããããããšã«ãããã³ã³ããŒãã³ããããã¯ã°ã©ãŠã³ãã§äºåã«ã¬ã³ããªã³ã°ãããããšãä¿èšŒããŸãããŠãŒã¶ãŒããShow Componentããã¿ã³ãã¯ãªãã¯ãããšãã³ã³ããŒãã³ãã¯ãã§ã«è¡šç€ºæºåãã§ããŠãããããã¹ã ãŒãºãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãå®çŸããŸãã
experimental_Offscreenã䜿çšããå©ç¹
- ããã©ãŒãã³ã¹ã®åäžïŒ
experimental_Offscreen
ã®äž»ãªå©ç¹ã¯ãç¹ã«è€éãªã³ã³ããŒãã³ããã¬ã³ããªã³ã°æéãããã«ããã¯ãšãªãã·ããªãªã§ã®ããã©ãŒãã³ã¹åäžã§ãã - å¿çæ§ã®åŒ·åïŒ ã¬ã³ããªã³ã°ã¿ã¹ã¯ãããã¯ã°ã©ãŠã³ãã«ãªãããŒãããããšã§ãã¡ã€ã³ã¹ã¬ããããŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ãåŠçããããã«è§£æŸãããããå¿çæ§ã®é«ãã¢ããªã±ãŒã·ã§ã³ãå®çŸããŸãã
- ã¹ã ãŒãºãªãã©ã³ãžã·ã§ã³ïŒ ããã¯ã°ã©ãŠã³ãã§ã³ã³ãã³ããäºåã«ã¬ã³ããªã³ã°ããããšã§ãããã²ãŒã·ã§ã³ã®ãã©ã³ãžã·ã§ã³ããã®ä»ã®UIæŽæ°ã®æ»ããããå€§å¹ ã«åäžããŸãã
- ããè¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ïŒ æçµçã«ã
experimental_Offscreen
ã®å©ç¹ã¯ãããé«éãªèªã¿èŸŒã¿æéãã¹ã ãŒãºãªã€ã³ã¿ã©ã¯ã·ã§ã³ãå¿çæ§ã®é«ãã¢ããªã±ãŒã·ã§ã³ãšãã£ããããè¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«ã€ãªãããŸãã
èæ ®äºé ãšãã¬ãŒããªã
experimental_Offscreen
ã¯å€§ããªå©ç¹ãæäŸããŸããããã®å¶éãšæœåšçãªãã¬ãŒããªããèªèããããšãéèŠã§ãã
- å®éšçã¹ããŒã¿ã¹ïŒ å®éšçAPIãšããŠã
experimental_Offscreen
ã¯å€æŽãããå¯èœæ§ããããŸãããã®APIã¯å°æ¥ã®ReactãªãªãŒã¹ã§å€æŽãããããåé€ããããããå¯èœæ§ããããŸãã - ã¡ã¢ãªæ¶è²»ïŒ ããã¯ã°ã©ãŠã³ãã§ã³ã³ããŒãã³ããã¬ã³ããªã³ã°ãããšã¡ã¢ãªãæ¶è²»ããŸããç¹ã«ãªãœãŒã¹ãéãããç°å¢ã§ã¯ããªãã¹ã¯ãªãŒã³ã§ã¬ã³ããªã³ã°ãããã³ã³ããŒãã³ãã®ã¡ã¢ãªãããããªã³ãã«æ³šæããããšãéèŠã§ãã
- åæèªã¿èŸŒã¿æéã®å¢å ïŒ
experimental_Offscreen
ã¯äœæããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãããããã¯ã°ã©ãŠã³ãã§è¿œå ã®ã³ã³ããŒãã³ããã¬ã³ããªã³ã°ããå¿ èŠããããããã¢ããªã±ãŒã·ã§ã³ã®åæèªã¿èŸŒã¿æéããããã«å¢å ããå¯èœæ§ããããŸãããã®å¢å ã¯éåžžãåŸã ã®ããã©ãŒãã³ã¹åäžã«ãã£ãŠçžæ®ºãããŸãã - ãããã°ã®è€éãïŒ ãªãã¹ã¯ãªãŒã³ã¬ã³ããªã³ã°ã«é¢é£ããåé¡ã®ãããã°ã¯ãåŸæ¥ã®Reactã³ã³ããŒãã³ãã®ãããã°ãããè€éã«ãªãå¯èœæ§ããããŸããã©ã®ã³ã³ããŒãã³ããããã¯ã°ã©ãŠã³ãã§ã¬ã³ããªã³ã°ãããŠãããããããŠããããã¢ããªã±ãŒã·ã§ã³ã®ä»ã®éšåãšã©ã®ããã«çžäºäœçšããããèªèããå¿ èŠããããŸãã
experimental_Offscreenã䜿çšããããã®ãã¹ããã©ã¯ãã£ã¹
experimental_Offscreen
ãæå€§éã«æŽ»çšããããã«ã以äžã®ãã¹ããã©ã¯ãã£ã¹ãæ€èšããŠãã ããïŒ
- ããã©ãŒãã³ã¹ã®ããã«ããã¯ãç¹å®ããïŒ
experimental_Offscreen
ã䜿çšããåã«ãããã©ãŒãã³ã¹åé¡ãåŒãèµ·ãããŠããç¹å®ã®ã³ã³ããŒãã³ããã·ããªãªãç¹å®ããŸãããããã¡ã€ãªã³ã°ããŒã«ã䜿çšããŠããã«ããã¯ãçªãæ¢ããŸãã - é«ã³ã¹ããªã³ã³ããŒãã³ãã察象ã«ããïŒ ã¬ã³ããªã³ã°ã«èšç®ã³ã¹ãããããã³ã³ããŒãã³ãã«
experimental_Offscreen
ã䜿çšããããšã«çŠç¹ãåœãŠãŸãã React.memo
ã䜿çšããïŒexperimental_Offscreen
ãReact.memo
ïŒãŸãã¯useMemo
ãšuseCallback
ã䜿çšããåçã®ãã®ïŒãšçµã¿åãããŠããªãã¹ã¯ãªãŒã³ã§ã¬ã³ããªã³ã°ãããã³ã³ããŒãã³ãã®äžèŠãªåã¬ã³ããªã³ã°ãé²ããŸãã- ã¡ã¢ãªæ¶è²»ãç£èŠããïŒ ã¢ããªã±ãŒã·ã§ã³ã®ã¡ã¢ãªæ¶è²»ãç£èŠãããªãã¹ã¯ãªãŒã³ã¬ã³ããªã³ã°ãéå°ãªã¡ã¢ãªäœ¿çšã«ã€ãªãããªãããã«ããŸãã
- 培åºçã«ãã¹ãããïŒ
experimental_Offscreen
ãå®è£ ããåŸãã¢ããªã±ãŒã·ã§ã³ã培åºçã«ãã¹ãããŠãæåŸ éãã«åäœããäºæããªãå¯äœçšããªãããšã確èªããŸãã - ãããã¡ã€ãªã³ã°ããŒã«ã䜿çšããïŒ Reactã®ãããã¡ã€ãªã³ã°ããŒã«ãå©çšããŠã
experimental_Offscreen
ã®äœ¿çšã«ãã£ãŠåŸãããå®éã®ããã©ãŒãã³ã¹åäžã枬å®ããŸããããã«ãããæåŸ ãããå©ç¹ãåŸãããŠãããããããªãæé©åãå¿ èŠãã©ããã倿ããã®ã«åœ¹ç«ã¡ãŸãã
çµè«ïŒReactããã©ãŒãã³ã¹ã®æªæ¥ãåãå ¥ãã
experimental_Offscreen
APIã¯ãReactã®ããã©ãŒãã³ã¹æé©åã«ããã倧ããªäžæ©ã衚ããŠããŸããããã¯ã°ã©ãŠã³ãã¬ã³ããªã³ã°ãå¯èœã«ããããšã§ãéçºè
ã¯ããå¿çæ§ãé«ããé
åçãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãäœæã§ããŸãããŸã å®éšçãªæ©èœã§ãããReactããã©ãŒãã³ã¹ã®æªæ¥ãå£éèŠã貎éãªæ©äŒãæäŸããè€éãªã¢ããªã±ãŒã·ã§ã³ãæé©åããããã®åŒ·åãªããŒã«ãæäŸããŸãã
Reactãé²åãç¶ããã«ã€ããŠãexperimental_Offscreen
APIã®ãããªãæ¹åãšæŽç·ŽãæåŸ
ã§ããŸãããã®æ©èœã詊ãããã¹ããã©ã¯ãã£ã¹ãæ¡çšããããšã§ãéçºè
ã¯Reactããã©ãŒãã³ã¹ã®æªæ¥ã«åããäžçäžã®ãŠãŒã¶ãŒã«åè¶ãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããŸããexperimental_Offscreen
ã䜿çšããããªãã®çºèŠãçµéšãReactã³ãã¥ããã£ã«è²¢ç®ããããšãæ€èšããŠãã ãããç¥èã®å
±æã¯ããã®ãããªæ©èœã®æŽç·Žãšæ¹åã«åœ¹ç«ã¡ãŸãã
ãããªãæ¢æ±
Reactã®ããã©ãŒãã³ã¹æé©åã®äžçãããã«æ·±ãæãäžããã«ã¯ã以äžã®ãªãœãŒã¹ãæ¢çŽ¢ããããšãæ€èšããŠãã ããïŒ
- Reactããã¥ã¡ã³ãïŒ å ¬åŒã®Reactããã¥ã¡ã³ãã¯ãããã©ãŒãã³ã¹æé©åãå«ãReactã®ããããåŽé¢ã«ã€ããŠåŠã¶ããã®åªãããªãœãŒã¹ã§ãã
- React ProfilerïŒ Reactã«çµã¿èŸŒãŸããŠãããããã¡ã€ã©ã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ããã«ããã¯ãç¹å®ã§ããŸãã
- ããã©ãŒãã³ã¹ç£èŠããŒã«ïŒ New RelicãSentryãªã©ã®ããã©ãŒãã³ã¹ç£èŠããŒã«ã䜿çšããŠãæ¬çªç°å¢ã§ã®Reactã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã远跡ããããšãæ€èšããŠãã ããã
- ã³ãã¥ããã£ãã©ãŒã©ã ïŒ Stack OverflowãRedditãªã©ã®ãã©ãŒã©ã ã§Reactã³ãã¥ããã£ãšäº€æµããä»ã®éçºè ããåŠã³ãèªèº«ã®çµéšãå ±æããŸãããã
æ°ããæè¡ãç¶ç¶çã«åŠã³ãå®éšããããšã§ãããªãã®Reactã¢ããªã±ãŒã·ã§ã³ãæé«ã®ããã©ãŒãã³ã¹ãçºæ®ããäžçäžã®ãŠãŒã¶ãŒã«ã·ãŒã ã¬ã¹ã§æ¥œããäœéšãæäŸã§ããããã«ãªããŸãã