The Opinionated Guide to React 04 - ReactJS packages Part 1
On React Router, Overmind, Framer motion, Styled components, Formik
React Router (6) permalink
history
: The history library lets you efficiently manage session history anywhere JavaScript runs (it's now a peer dependency)<Route path="/" element={<Home />}/>
==<Home path="/" />
<Link>
To create links between pages in the same app.The
<Switch/>
component has been replaced by<Routes/>
in version 6.React router version 6 replaces the
useHistory()
hook with theuseNavigate()
hook.Params are placeholders in the URL that begin with a colon, like the
:id
param defined in the route in this example.Nested routing helps us to render the sub-routes like
users/1
,users/2
, etc.Use
Outlet
to tell the parent that it has to render any of the matching children that it finds.NavLink
: a special type of Link component that knows when it's active and accepts anactiveStyle
or anactiveClassName
that will be activated when you are in the route the link points to.
Overmind permalink
- it is a mutable state management option
import { createOvermind } from "overmind";
import { createHook, Provider } from "overmind-react";
Framer motion permalink
To animate an element, you make it a motion element (
motion.h1
,motion.p
...), then give it ananimate
prop with value as an object.Some other properties:
initial
,transition
,whileHover
,exit.
Also,
variants
! (for abstracting properties)
Styled components permalink
Solve the issue of string interpolation, theming, SSR, and even global styles that are attached to the theme.
For keeping your presentational components separate from the logic.
Every styled component will know about the styling from the
ThemeProvider
!
import { ThemeProvider } from "styled-components";
import { theme } from "./utils/styles"; // where we define our styles
<ThemeProvider theme={theme}>
- For adding global styles:
export const Style = createGlobalStyle`
body {
text-align: center;
margin: 0;
background-color: ${(props) => props.theme.colors.black};
color: ${(props) => props.theme.colors.white};
font-family: ${(props) => props.theme.font}
} `;
- You wrap your element inside a
styled
function (don't forget to add the backticks!)
const Heading = styled.h1`
display: block;
`;
- You can do JS logic:
background: ${({ theme, react }) => (react ?
theme.colors.white : "black")};
Formik permalink
import { useFormik } from "formik";
We pass our form's
initialValues
and a submission function (onSubmit
) to theuseFormik()
hook.We also get a bunch of helper methods:
handleSubmit
: A submission handlerhandleChange
: A change handler to pass to each<input>
,<select>
, or<textarea>
values
: Our form's current values
Formik
keeps track of not only your form's values but also its error messages and validation.
getFieldProps() permalink
Given some field-level info, it returns the exact group of
onChange
,onBlur
,value
,checked
for a given field. You can then spread that on aninput
,select
, ortextarea.
from:
<input
onChange={formik.handleChange}
value={values.email}
onBlur={formik.handleBlur}
type="email"
id="email"
/>
- to:
<input {...getFieldProps("email")} type="email" id="email" />
Yup
validation library (from theJoi
family)