react state
unit converter
array.filter(Boolean)
stateë ë°ėīí°ę° ė ėĨëë ęģģė ë§íëĪ.
ë°ëëž JS ė―ëėėë counterëĨž ėĶę°ėíĪęģ ėīëĨž UIė ëėĪíë ėī íęģ ėëĪ.
ėīë ë°ëë ë°ėīí°ę° í ëđëë counter ëģėëĨž stateëĄ ë§ëĪ ė ėëĪ.
ëĻžė , stateëĨž ėŽėĐíė§ ėë ë°Đëēė ėīíīëģīėëĐī ëĪėęģž ę°ëĪ.
const root = document.getElementById("root");
let counter = 0;
function countUp () {
counter++; // 3. counter ę°ė ėŽëĶŽęģ
render(); // 4. ë°ë counter ę°ė ę°ė§ë App ėŧīíŽëíļëĨž ëĪė render íëĪ
}
function render () {
ReactDOM.render(<App />, root);
}
function App() {
return (
<div>
<h3>Total Click: {counter}</h3>
<button onClick={countUp}>íīëĶ</button>
</div>
);
} // 2. ëēížė íīëĶí ëë§ëĪ ėīëēĪíļ ëĶŽėĪëę° ėĪíëëĪ.
render(); // 1. ėēė App ėŧīíŽëíļëĨž render íėŽ íëĐīė ëģīėŽėĪëĪ
ëĪë§, ėī ë°Đëēė ėŽėĐí ëë ë°ėīí°ę° ë°ë ëë§ëĪ ëĶŽë ëë§ íęļ° ėíī ReactDOM.render() íĻėëĨž íļėķíīėžë§ íëĪ.
ðĄ React JSėėė ëĶŽë ëë§
ë°ëëž JS ė―ëëĨž ėŽėĐíëĐī ė§ė í ėė ė ėēīę° ė ë°ėīíļ ëëĪ.
ę°ë°ė ëęĩŽëĨž íĩíī ėīíīëģīëĐī span.innerTextė ėíī counter ëģėë§ėī ėëëž 'Total Click' í ėĪíļęđė§ íŽíĻíėŽ span ėė ė ėēīę° ė ë°ėīíļ ëë ęēė íėļí ė ėëĪ.ë°ëĐīė, React JSëĨž ėŽėĐíëĐī UIėė ë°ë ëķëķë§ė ė ë°ėīíļ í ė ėëĪ.
ę°ë°ė ëęĩŽëĨž íĩíī ėīíīëģīëĐī counter ëģėė íīëđíë ëķëķë§ ė ë°ėīíļ ëë ęēė ė ė ėëĪ.
React JSë ėīė ė ë ëë§ë ėŧīíŽëíļę° ëŽīėėļė§ëĨž íėļíęģ , ëĪėė ë ëë§ë ėŧīíŽëíļë ëŽīėėļė§ëĨž íėļíėŽ, ë°ë ëķëķë§ė ė ë°ėīíļ íīėĪëĪ.
ëĪė ë§íī, CountUp íĻėė ėíī ë°ėīí°ëĨž ë°ęūž í ëĶŽë ëë§ íęē ëëĐī ë°ë ë°ėīí°ëĨž ę°ė§ë
App ėŧīíŽëíļ ė ëķę° ėŽėėą
ëėī rootė ë°°ėđëė§ë§, ėĪė ëĄë ėĪëĄė§counter ëģėë§ėī ë°ë ëŋėīëĪ.
ėīë ėļí°ë í°ëļí ėīíëĶŽėžėīė ė ë§ëë ë° ë§Īė° í° ëėėī ëëĪ.
React.useState()ëĨž ėŽėĐíëĐī (render íĻėëĨž ęģė íļėķí íė ėėī) React JS ėīí ëīė ë°ėīí°ëĨž ëģīęī
íęģ , ėëėžëĄ ëĶŽë ëë§
ė ėžėžíŽ ė ėëĪ.
const App = () => {
const [counter, setCounter] = React.useState(0);
const onClick = () => {
setCounter(counter + 1);
};
return (
<div>
<h3>Total Click: {counter}</h3>
<button onClick={onClick}>íīëĶ</button>
</div>
);
};
const root = document.getElementById("root");
ReactDOM.render(<App />, root);
React.useState()
ė ë°°ėīė return íëĐ°, ėļėëĄë ë°ėīí°ė ėīęļ°ę°ė ė ëŽí ė ėëĪ.
counterë ë°ėīí°, setCounterë ë°ėīí°ëĨž ë°ęūļë ë° ėŽėĐëë íĻėėīëĪ.
const [counter, setCounter] = React.useState(0);
// ėė ėëë ę°ė ė―ëėīëĪ
const data = React.useState(0);
const counter = data[0];
const setCounter = data[1];
React.useState()ę° ë°ííë ë°°ėīė ë ëēė§ļ ėė
ėļ setCounter íĻėë, counter ëģėė ę°ė ë°ęūž í, ėīëĨž ėëėžëĄ ëĶŽë ëë§ęđė§ íīėĪëĪ.
const OnClick = () => {
setCounter(counter + 1);
};
// ėė ėëë ę°ė ė―ëėīëĪ
const OnClick = () => {
counter++;
ReactDOM.render(<Container />, root);
};
ðĄ React JSėėė ëĶŽë ëë§
(1)ęģž ë§ė°Žę°ė§ëĄ ë§ė°Žę°ė§ëĄ UIėė ë°ë ëķëķë§ė ė ë°ėīíļ í ė ėëĪ.
App ėŧīíŽëíļė state, ėĶ ėīíëĶŽėžėīė ė ë°ėīí°ę° ë°ëëĐī App ėŧīíŽëíļ ė ëķëĨž ėŽėėą(ëĶŽë ëë§)íëĪ.
(App íĻėėė return íęļ° ė ė ė―ė ëĄę·ļëĨž ėķę°íëĐī íīëĶí ëë§ëĪ ė―ėė ę°ėī ėķë ĨëëĪ.)ę·ļëŽë ëŽžëĄ ėŽęļ°ėë ėĪė ëĄë ėĪëĄė§
counter ëģėë§ėī ë°ë ëŋėīëĪ.
(ę°ë°ė ëęĩŽė elements íė ėīíīëģīëĐī ëēížė íīëĶí ëë§ëĪ counter ëģė ëķëķë§ėī ëģíëĪ.)
ð ėīė ëĻęģė stateëĨž ėīėĐíīė ëĪė ëĻęģė state ë°ęūļęļ°
stateëĨž ėĪė íë ë°ë 2ę°ė§ ë°Đëēėī ėëĪ.
íëë ė§ė state ę°ė ė ë ĨíīėĢžë ęēėīęģ (ex.setCounter(333)
), ëĪëĨļ íëë ėīė ëĻęģė stateëĨž ėīėĐíī ëĪė ëĻęģė stateëĨž ë°ęūļë ęēėīëĪ.(ex.setCounter(counter + 1)
)const onClick = () => { // setCounter(counter + 1); setCounter(current => current + 1); };
ėėėë ėīė ëĻęģė stateëĨž ėīėĐíīė ëĪė ëĻęģė stateëĨž ë°ęūļęļ° ėíī
setCounter(counter + 1)
ëĨž ėĪííëĪ.
ę·ļëŽë ėīë ęē ėėąíëĐī ėęļ°ėđ ëŠŧíęē ëĪëĨļ ęģģėė stateę° ëģęē―ë ęē―ė° ėėęģž ëĪëĨļ ęē°ęģžę° ëėŽ ėë ėëĪ.
ëė ėsetCounter(current => current + 1)
ė ėĪííë ęēėī ë ėė íëĪ.
foręģž classë ėë°ėĪíŽëĶ―íļėë ėĄīėŽíë ėė―ėīėīęļ° ëëŽļė JSX ė―ëėė ėŽėĐíë Īęģ íëĐī ėëŽę° ëŽëĪ.
ëė ė JSX ëŽļëēė ë°ëž htmlForęģž classNameė ėŽėĐíīėž íëĪ.
React JS ėļęģėė ėėąí inputė valueë ė§ė íĩė í ė ėëĪ.(uncontrolled input)
ë°ëžė, stateëĨž ë§ëĪėīė inputė value ėėąėžëĄ ė íīėĪ í(ėīë React.useState()ė ėļėëĄ ęļ°ëģļę°ė ė§ė íīėž ęē―ęģ ę° ėëļ) ėŽėĐėę° inputė ëĪëĨļ ę°ė ė ë Ĩí ëë§ëĪ inputė valueëĨž ė ë°ėīíļ íėŽ(onChange íĻė) ę·ļ ę°ė ėļëķėė ę°ė ļėĪëëĄ íīėž íëĪ.({minutes} ėīėĐ)
inputė valueëĨž stateė ė°ęē°ėíīėžëĄėĻ, inputė valueëĨž ėļëķėėë ėė í ė ėëĪ.
const App = () => {
const [minutes, setMinutes] = React.useState(0);
const onChange = (event) => setMinutes(event.target.value);
return (
<div>
<label htmlFor="minutes">Minutes</label>
<input
value={minutes}
id="minutes"
placeholder="Minutes"
type="number"
onChange={onChange}
/>
<label htmlFor="hours">Hours</label>
<input id="hours" placeholder="Hours" type="number" />
<h4>minutes inputė valueë {minutes} ė
ëëĪ</h4>
</div>
);
};
const root = document.getElementById("root");
ReactDOM.render(<App />, root);
onChange íĻė ėėė console.log(event) ëĨž ėĪííëĐī ė―ė ė°―ė SyntheticBaseEvent ę°ėēīę° ėķë ĨëëĪ.
ėīë nativeEventëĨž ę°ė§ëë° ėī ėė targetėī inputė ėëŊļíęģ targetė valueëĨž ę°ė§ëĪ.
ėĶ, console.log(event.target.value
) ëĨž ėĪííëĐī ė―ė ė°―ė inputė value
ę° ėķë ĨëëĪ.
ėīė setMinutes íĻėëĨž ėīėĐíī minutesëĨž ė
ë°ėīíļ í í Appp ėŧīíŽëíļëĨž ëĶŽë ëë§íīėž íëĪ.
ėīė minutes inputė ėŽėĐėę° ę°ė ė ë ĨíėŽ inputė valueę° ëģí ëë§ëĪ ę·ļ ëģíę° h4ė ėĪėę°ėžëĄ ë°ėëėī ëģīėīęē ëëĪ.
ðĄ ėīë onChange={onChange} ė―ëëĨž ėė íëĐī ėëŽīëĶŽ minutes inputėė íĪëģīëëĨž ëëŽ ę°ė ė ë Ĩíīë input ė°―ėë ęģė 0ë§ ëģīėļëĪ.
ėīë ėë inputė valueėļ {minutes}ė ęļ°ëģļę°ė 0ėžëĄ ėĪė í í
ėŽėĐėę° íĪëģīëëĨž ëëŽ ę°ė ëģęē―í ëë§ëĪ onChange ėīëēĪíļ ëĶŽėĪëė ėíī minutes ę°ėī ëģęē―ëĻėžëĄėĻ
inputė valueë ëģęē―ëęģ App ėŧīíŽëíļę° ëĶŽë ëë§ëëëĄ íëë°onChange ėīëēĪíļ ëĶŽėĪëëĨž ėė íęļ° ëëŽļė minutesė ę°ėī 0ėļ ėíėė ė ë°ėīíļ ëė§ ėęļ° ëëŽļėīëĪ.
ëĪė ë§íī, minutes inputė ęē―ė° â ëĻžė change eventë ëĶŽėĪë íīėž íęģ , ⥠change eventę° ë°ėíė ë inputė valueëĨž ė ë°ėīíļ íęģ UIė ëģīėŽėĢžęļ°ë íīėž íëĪ.
hours inputė ęē―ė° input ė°―ė ėė í ė ėëëĄ change eventëĨž ëĶŽėĪëíė§ ėęēë íëĪ.
const App = () => {
const [minutes, setMinutes] = React.useState(0);
const onChange = (event) => setMinutes(event.target.value);
const onClick = () => setMinutes(0); // reset ëēíž íīëĶ ė minutes(inputė value) ėīęļ°í
return (
<div>
<h1>Super Converter</h1>
<div>
<label htmlFor="minutes">Minutes</label>
<input
value={minutes}
id="minutes"
placeholder="Minutes"
type="number"
onChange={onChange}
/>
</div>
<div>
<label htmlFor="hours">Hours</label>
<input
value={Math.round(minutes / 60)} // ëĻė ëģí
id="hours"
placeholder="Hours"
type="number"
/>
</div>
<button onClick={onClick}>Reset</button>
</div>
);
};
const root = document.getElementById("root");
ReactDOM.render(<App />, root);
ęļ°ëģļė ėžëĄ hours inputė disabledëĨž ė ėĐíęģ minutes inputė enabled ėíëĄ ëëĪ.
stateëĨž íë ë ë§ëĪėī flip ëēížė ëëĨīëĐī flipped ëģėė ę°ėī ë°ëę° ëëëĄ íëĪ.
const App () => {
...
const [flipped, setFlipped] = React.useState(false); // ęļ°ëģļę° false
const onFlip = () => setFlipped(current => !current); // flipped ëģė ę° ė
ë°ėīíļ & App ėŧīíŽëíļ ëĶŽë ëë§
return (
<div>
<div>
<label htmlFor="minutes">Minutes</label>
<input
id="minutes"
...
disabled={flipped} // {flipped === true} ė ę°ëĪ
/>
</div>
<div>
<label htmlFor="hours">Hours</label>
<input
id="hours"
...
disabled={!flipped} // {flipped === false} ė ę°ëĪ
/>
</div>
...
<button onClick={onFlip}>{flipped ? "Turn back" : "Flip"}</button>
</div>
);
};
minutes inputė ę°ė ė
ë Ĩíė ëėë§ hours inputė {Math.round(minutes / 60)}ė ę°ėī ëģīėŽė§ëëĄ íęģ , hours inputė ę°ė ė
ë Ĩíė ëë hours inputė ė
ë Ĩí ę°ė ę·ļëëĄ ëģīėŽėĢžëëĄ íīėž íëĪ.
minutes inputė ęē―ė°ėë ë§ė°Žę°ė§ėīëĪ.
ėīëĨž ėíī flipped ëģėė ę°ė ėīėĐíī ėĄ°ęąīëķ ėží ė°ė°ėëĨž ėŽėĐí ė―ëëĄ ėė
í ė ėëĪ.
ė―ëė ížëė ížíęļ° ėíī ėėė ė ėļí minutesëĨž amountëĄ, setMinutesëĨž setAmountëĄ ë°ęŋėĢžėëĪ.
ę·ļë°ë° ėīë ęē ėėąíëĐī ëŽļė ę° íë ėëĪ.
flip ëēížė íīëĶíëĐī íėąíë inputė valueė amount ëģėė ę°ėī í ëđëėī ëģīėīęē ëëĪ.
ėīëĨž íīęē°íęļ° ėíī onFlip íĻėė reset() ė―ëëĨž ėķę°
íëĪ.
const onFlip = () => {
setAmount(current => !current);
reset();
};
...
<input
value={!flipped ? amount : amount * 60}
id="minutes"
...
disabled={flipped}
/>
...
<input
value={flipped ? amount : Math.round(amount / 60)}
id="hours"
...
disabled={!flipped}
/>
const array = [1, "hi", null, ``, false];
const truthyCount = array.filter(Boolean).length;
// ė ėëë ę°ė ė―ëėīëĪ.
// Boolean()ė ę·ļ ėļėę° trueėž ë trueëĨž, falseėž ë falseëĨž ëĶŽíīíë íĻėėīëĪ.
const truthyCount = array.filter((item) => Boolean(item)).length;
console.log(truthyCount); // ë°°ėī [1, "hi"]ė ęļļėīë 2