React is a free and open-source front-end JavaScript library for building user interfaces based on UI components. It is maintained by Meta and a community of individual developers and companies.
Content
1 Create
TypeScript Template
npx create-react-app my-app --template typescript
Default Template
npx create-react-app my-app
2 Organizational Structure
public
index.html
src
components
navbar
BarComponents
NavContainer
Security
GoogleSignIn
GoogleSignOut
config
error
models
pages
routes
AppRoute
stylesheet
App.css
App
index
.gitignore
package.json
package-lock.json
README.md
tsconfig.json
3 Router
import { BrowserRouter, Routes, Route } from "react-router-dom";
import { NavContainer } from "../components/navbar/NavContainer";
import { Error404 } from "../error/Error404";
import { Home } from "../pages/Home/Home";
import { HomePage } from "../pages/User/HomePage";
import { Login } from "../pages/User/Login";
import { MyAccount } from "../pages/User/MyAccount";
export const AppRoute = () => {
return (
<div>
<BrowserRouter>
<NavContainer />
<Routes>
<Route>
<Route index element={<Home />} />
<Route path='/Login' element={<Login />} />
<Route path='/HomePage' element={<HomePage />} />
<Route path='/MyAccount' element={<MyAccount />} />
<Route path='/Error404' element={<Error404 />} />
<Route path='*' element={<Load4 />} />
</Route>
</Routes>
</BrowserRouter>
</div>
);
};
4 CSS
Inline Styling
<h1 style={ color: "red" }>Hello Style!</h1>
JavaScript Object
class MyHeader extends React.Component {
render() {
const mystyle = {
color: "white",
backgroundColor: "DodgerBlue",
padding: "10px",
fontFamily: "Arial",
};
return (
<div>
<h1 style={mystyle}>Hello Style!</h1>
<p>Add a little style!</p>
</div>
);
}
}
CSS Stylesheet
import "./App.css";
5 React Props
Add a name
attribute to the Car element:
return <User name='Max' />;
Use the name
attribute in the component:
function Car(props) {
return <h2>My name is {props.name}!</h2>;
}
6 Condition
Ternary if
And I am {props.age >= 18 ? 'old enough' : 'not old enough'} to go.
7 Array
declare
const Names = [
{ name: "Jake", age: 10 },
{ name: "Andrew", age: 15 },
{ name: "Phillip", age: 20 },
];
Retrieve
return (
<div>
<p>{Names[0].name}</p>
{Names.map((Name, key) => {
return (
<>
<p>
{Name.name} is {Name.age}!
</p>
</>
);
})}
</div>
);
8 useState
NUMBER
let [number, setNumber] = useState(0);
const increaseNum = () => {
setNumber(number + 1);
};
return (
<div>
<p>{number}</p>
<button onClick={increaseNum}>Increase</button>
</div>
);
CASE
let [text, setText] = useState("");
const changeText = (e) => {
setText(e.target.value.toUpperCase());
};
return (
<div>
<p>Capital Letters here ..</p>
<input type='text' onChange={changeText} value={text} />
</div>
);
VISIBILITY
let [show, setShow] = useState(true);
const hideShow = () => {
setShow(!show);
};
return (
<div>
{show ? <p>This is the field</p> : <p></p>}
<button onClick={hideShow}>Hide/Show</button>
</div>
);
COLOR
let [color, setColor] = useState("black");
const colorChange = () => {
setColor(color === "red" ? "black" : "red");
};
return (
<div>
<p style={ color: color }>Colored</p>
<button onClick={colorChange}>Change Color</button>
</div>
);
9 API
METHOD 1
fetch("https://catfact.ninja/fact")
.then((res) => res.json())
.then((data) => {
console.log(data);
});
METHOD 2A
const [name, setName] = useState("");
const [predict, setPredict] = useState(null);
const fetchData = () => {
Axios.get(`https://api.agify.io/?name=${name}`).then((res) => {
setPredict(res.data);
});
};
METHOD 2B
let [number, setNumber] = useState(0);
const increaseNum = () => {
setNumber(number + 1);
};
Retrieve
return (
<div>
<p>{catFact}</p>
<input
onChange={(e) => {
setName(e.target.value);
}}
/>
<button onClick={fetchData}>Predict</button>
<p>Name- {predict?.name}</p>
<p>Predicted age- {predict?.age}</p>
<p>Count- {predict?.count}</p>
</div>
);
10 From
Requirements
import { useForm } from "react-hook-form";
import { yupResolver } from "@hookform/resolvers/yup";
import * as yup from "yup";
schema
const schema = yup.object().shape({
fullName: yup.string().required("fill the name"),
email: yup.string().email().required(),
age: yup.number().positive().integer().min(18).required(),
password: yup.string().min(4).max(20).required(),
confirmPassword: yup
.string()
.oneOf([yup.ref("password"), null])
.required(),
});
Declarations
const {
register,
handleSubmit,
formState: { errors },
} = useForm({
resolver: yupResolver(schema),
});
onSubmit
const onSubmit = (data) => {
console.log(data);
};
Retrieve
return (
<form onSubmit={handleSubmit(onSubmit)}>
<input type='text' placeholder='Full Name' {...register("fullName")} />
<p>{errors.fullName?.message}</p>
<input type='email' placeholder='Email' {...register("email")} />
<p>{errors.email?.message}</p>
<input type='number' placeholder='Age' {...register("age")} />
<p>{errors.age?.message}</p>
<input type='Password' placeholder='Password' {...register("password")} />
<p>{errors.password?.message}</p>
<input
type='Password'
placeholder='Confirm Password'
{...register("confirmPassword")}
/>
<p>{errors.confirmPassword?.message}</p>
<button>Submit</button>
</form>
);