React Hooks Cheatsheet: Usestate Hook
React Hooks Cheatsheet: Usestate Hook
useState Hook
useState to Create State Variables
import "./styles.css";
import React from 'react';
import "./styles.css";
import React from 'react';
function changeLanguage() {
setLanguage('React Hooks')
}
import "./styles.css";
import React from "react";
function changeLanguage() {
setLanguage("React Hooks");
}
import "./styles.css";
import React from "react";
function changeLanguage() {
setLanguage("React Hooks");
}
function addYear() {
setYears(prev => prev + 1)
}
return (
<div>
<h1 onClick={changeLanguage}>
I've learned {language} for {years} years
</h1>
<button onClick={addYear}>Add Year</button>
</div>
);
}
import "./styles.css";
import React from "react";
function changeLanguage() {
setState({...state, language: "React Hooks"});
}
function addYear() {
setState(prev => {
return {
...prev,
years: prev.years + 1
}
})
}
return (
<div>
<h1 onClick={changeLanguage}>
I've learned {state.language} for {state.years} years
</h1>
<button onClick={addYear}>Add Year</button>
</div>
);
}
useEffect Hook
useEffect to Perform Side Effects
import "./styles.css";
import React from "react";
return (
<div>
<h1>React App</h1>
</div>
);
}
React.useEffect(() => {
document.body.style.background = color;
document.body.style.color = 'white';
}, [color]);
function changeColor() {
setColor('gold')
}
return (
<div>
<h1>React App</h1>
<button onClick={changeColor}>Change color</button>
</div>
);
}
import "./styles.css";
import React from "react";
React.useEffect(() => {
document.body.style.background = color;
document.body.style.color = 'white';
window.addEventListener('keydown', handleEnterButton)
return () => {
window.removeEventListener('keydown', handleEnterButton)
}
}, [color]);
function changeColor() {
setColor('gold')
}
function handleEnterButton(event) {
if (event.keyCode === 13) {
setColor('red')
return (
<div>
<h1>React App</h1>
<button onClick={changeColor}>Get color</button>
</div>
);
}
import "./styles.css";
import React from "react";
React.useEffect(() => {
fetch('https://randomuser.me/api/')
.then(res => res.json())
.then(data => setUser(data.results[0]))
}, [])
React.useEffect(() => {
document.body.style.background = color;
document.body.style.color = 'white';
window.addEventListener('keydown', handleEnterButton)
return () => {
window.removeEventListener('keydown', handleEnterButton)
}
}, [color]);
function changeColor() {
setColor('gold')
}
function handleEnterButton(event) {
if (event.keyCode === 13) {
setColor('red')
}
}
return (
<div>
<h1>React App</h1>
<button onClick={changeColor}>Get color</button>
useRef Hook
useRef to Reference React Elements
import './styles.css'
import React from 'react';
function handleClearInput() {
inputRef.current.value = "";
inputRef.current.focus();
}
return (
<form>
<input
type="text"
ref={inputRef}
/>
<button type="button" onClick={handleClearInput}>
Clear Input
</button>
</form>
);
}
useCallback Hook
useCallback Prevents Callbacks from Being Recreated
import './styles.css'
import React from 'react';
function handleAddSkill() {
setSkills(skills.concat(skill));
}
return (
<>
<input onChange={handleChangeInput} />
<button onClick={handleAddSkill}>Add Skill</button>
<SkillList skills={skills} handleRemoveSkill={handleRemoveSkill} />
</>
);
}
useMemo Hook
useMemo Can Improve Expensive Operations
import './styles.css'
import React from 'react';
return (
<>
<h3>Search Results</h3>
<input onChange={handleSearchInput} />
<ul>
{searchResults.map((result, i) => (
<li key={i}>{result}</li>
))}
</ul>
</>
);
}
useContext Hook
useContext Helps Us Avoid Prop Drilling
import './styles.css'
import React from 'react';
return (
<UserContext.Provider value={user}>
<Main />
</UserContext.Provider>
);
}
function handleLogin() {
dispatch({
type: "LOGIN",
payload: {
username: "Reed"
}
})
}
function handleSignout() {
dispatch({
type: "SIGNOUT"
})
}
return (
<>
Current user: {state.username}
<br />
isAuthenticated: {JSON.stringify(state.isAuth)}
<br />
<button onClick={handleLogin}>Login</button>
<button onClick={handleSignout}>Signout</button>
</>
);
}