Posted on Leave a comment

How I’ve Been Using Notion Personally and Professionally

I use Notion quite a bit, both personally and professionally.

In a sense, it’s just an app for keeping documents in one place: little notes, to-do lists, basic spreadsheets, etc. I like the native macOS Notes app just fine. It’s quick and easy, it’s desktop and mobile, it syncs… but there are enough limitations that I wanted something better. Plus, I wanted something team-based and web-friendly (shared URLs!) and Notion hits those nails on the head.

Here’s a bunch of ways to use Notion as well as some scattered random notes and ideas about it.

Workspaces are your teams

The word “workspace” almost makes it seem like you could or should use them as your top-level organization structure within a team. Like different projects would use different workspaces. But I’d say: don’t do that. Workspaces are teams, even if it’s a party of you and only you.

Pricing is billed by workspace. Team members are organized by workspace. Search is scoped by workspace. Switching workspaces isn’t too difficult, but it’s not lightning fast, either. I’d say it’s worth honoring those walls and keeping workspaces to a minimum. It’s almost like Slack. It’s easy to get Too-Many-Slack’d, so best to avoid getting Too-Many-Notion’d.

Meeting notes

We have a weekly all-hands meeting at CodePen where we lay out what we’ve done and what we’re going to do. It’s nice to have that as a document so it can include links, notes, comments, embeds, etc.

Those notes don’t disappear next week — we archive them as a historical record of everything we do.

Publishing and advertising schedules

I like looking at a spreadsheet-like document to see upcoming CSS-
Tricks articles with their statuses:

But that same exact document can be viewed as a calendar as well, if that’s easier to look at:

There can be all sorts of views for the same table of content, which is a terrific feature:

Knowledge bases

This might be the easiest selling point for Notion. I’m sure a lot of companies have a whole bunch of documents that get into how the company works, including employee databases, coding guidelines, deployment procedures, dashboards to other software, etc. Sometimes that works as a wiki, but I’ve never seen a lovely setup for this kind of thing. Notion works fantastically as a collaborative knowledge base.

Public documents

I can make a document public, and even open it to public comments with the flip of a switch.

Another super fun thing in Notion is applying a header image and emoji, which gives each document a lot of personality. It’s done in a way that can’t really be screwed up and made into a gross-looking document. Here’s an example where I’ve customized the page header — and look at the public URL!

I’ve also used that for job postings:

It’s also great for things like public accessibility audits where people can be sent to a public page to see what kinds of things are being worked on with the ability to comment on items.

Quick, collaborative documents

Any document can be shared. I can create a quick document and share it with a particular person easily. That could be a private document shared only with team members, or with someone totally outside the team. Or I can make the document publicly visible to all.

I use Notion to create pages to present possibilities with potential sponsorship partners, then morph that into a document to keep track of everything we’re doing together.

We use a show calendar for ShopTalk episodes. Each show added to the calendar automatically creates a page that we use as collaborative show notes with our guests.

It’s worth noting that a Notion account is required to edit a document. So anyone that’s invited will have to register and be logged in. Plus, you’ll need to share it with the correct email address so that person can associate their account with that address.

Blog post drafts

I’ve been trying to keep all my blog post drafts in Notion. That way, they can easily be shared individually and I can browse all the collected ideas at once.

Exporting posts come out as Markdown too, and that’s great for blog post drafts because it translates nicely:

Private sub-team documents

Being able to share documents with specific people is great. For example, we have a Founder’s Meetings section on CodePen:

There are probably a million more things

Notion is simply documents with interesting blocks. Simple, but brilliant. For me, it can replace and consolidate things like Trello and other kanban tools, lightweight project management platforms, GitHub issues (if you don’t need the public-ness), wikis, Google Docs and Spreadsheets, and even simple one-off public websites.

Here’s a website dedicated to other people’s interesting Notion pages.

What I want from Notion

I’d love to see Notion’s web app links open in their desktop app instead of the web. I prefer the app because I have plenty of browser tabs open as it is. It’s gotta be possible to do this with a browser extension. There used to be “Paws” for Trello and there was a browser extension that would open Trello links in that app, so there is prior precedent out there.

I’d also like Notion to explore a tabs feature. I constantly need more than one document open at a time and right now the only way to do that is with multiple windows. There is some back-and-forth arrow action that’s possible, but it would be interesting to see native tabs or native window splitting somehow.

I’d love to see some performance upgrades too. It’s not terribly bad, but working in Notion is so ubiquitous and important in my day-to-day that I’d love for it to feel more instantaneous than it currently does.

The post How I’ve Been Using Notion Personally and Professionally appeared first on CSS-Tricks.

CSS-Tricks

Posted on Leave a comment

How I’ve Been Using Notion Personally and Professionally

I use Notion quite a bit, both personally and professionally.

In a sense, it’s just an app for keeping documents in one place: little notes, to-do lists, basic spreadsheets, etc. I like the native macOS Notes app just fine. It’s quick and easy, it’s desktop and mobile, it syncs… but there are enough limitations that I wanted something better. Plus, I wanted something team-based and web-friendly (shared URLs!) and Notion hits those nails on the head.

Here’s a bunch of ways to use Notion as well as some scattered random notes and ideas about it.

Workspaces are your teams

The word “workspace” almost makes it seem like you could or should use them as your top-level organization structure within a team. Like different projects would use different workspaces. But I’d say: don’t do that. Workspaces are teams, even if it’s a party of you and only you.

Pricing is billed by workspace. Team members are organized by workspace. Search is scoped by workspace. Switching workspaces isn’t too difficult, but it’s not lightning fast, either. I’d say it’s worth honoring those walls and keeping workspaces to a minimum. It’s almost like Slack. It’s easy to get Too-Many-Slack’d, so best to avoid getting Too-Many-Notion’d.

Meeting notes

We have a weekly all-hands meeting at CodePen where we lay out what we’ve done and what we’re going to do. It’s nice to have that as a document so it can include links, notes, comments, embeds, etc.

Those notes don’t disappear next week — we archive them as a historical record of everything we do.

Publishing and advertising schedules

I like looking at a spreadsheet-like document to see upcoming CSS-
Tricks articles with their statuses:

But that same exact document can be viewed as a calendar as well, if that’s easier to look at:

There can be all sorts of views for the same table of content, which is a terrific feature:

Knowledge bases

This might be the easiest selling point for Notion. I’m sure a lot of companies have a whole bunch of documents that get into how the company works, including employee databases, coding guidelines, deployment procedures, dashboards to other software, etc. Sometimes that works as a wiki, but I’ve never seen a lovely setup for this kind of thing. Notion works fantastically as a collaborative knowledge base.

Public documents

I can make a document public, and even open it to public comments with the flip of a switch.

Another super fun thing in Notion is applying a header image and emoji, which gives each document a lot of personality. It’s done in a way that can’t really be screwed up and made into a gross-looking document. Here’s an example where I’ve customized the page header — and look at the public URL!

I’ve also used that for job postings:

It’s also great for things like public accessibility audits where people can be sent to a public page to see what kinds of things are being worked on with the ability to comment on items.

Quick, collaborative documents

Any document can be shared. I can create a quick document and share it with a particular person easily. That could be a private document shared only with team members, or with someone totally outside the team. Or I can make the document publicly visible to all.

I use Notion to create pages to present possibilities with potential sponsorship partners, then morph that into a document to keep track of everything we’re doing together.

We use a show calendar for ShopTalk episodes. Each show added to the calendar automatically creates a page that we use as collaborative show notes with our guests.

It’s worth noting that a Notion account is required to edit a document. So anyone that’s invited will have to register and be logged in. Plus, you’ll need to share it with the correct email address so that person can associate their account with that address.

Blog post drafts

I’ve been trying to keep all my blog post drafts in Notion. That way, they can easily be shared individually and I can browse all the collected ideas at once.

Exporting posts come out as Markdown too, and that’s great for blog post drafts because it translates nicely:

Private sub-team documents

Being able to share documents with specific people is great. For example, we have a Founder’s Meetings section on CodePen:

There are probably a million more things

Notion is simply documents with interesting blocks. Simple, but brilliant. For me, it can replace and consolidate things like Trello and other kanban tools, lightweight project management platforms, GitHub issues (if you don’t need the public-ness), wikis, Google Docs and Spreadsheets, and even simple one-off public websites.

Here’s a website dedicated to other people’s interesting Notion pages.

What I want from Notion

I’d love to see Notion’s web app links open in their desktop app instead of the web. I prefer the app because I have plenty of browser tabs open as it is. It’s gotta be possible to do this with a browser extension. There used to be “Paws” for Trello and there was a browser extension that would open Trello links in that app, so there is prior precedent out there.

I’d also like Notion to explore a tabs feature. I constantly need more than one document open at a time and right now the only way to do that is with multiple windows. There is some back-and-forth arrow action that’s possible, but it would be interesting to see native tabs or native window splitting somehow.

I’d love to see some performance upgrades too. It’s not terribly bad, but working in Notion is so ubiquitous and important in my day-to-day that I’d love for it to feel more instantaneous than it currently does.

The post How I’ve Been Using Notion Personally and Professionally appeared first on CSS-Tricks.

CSS-Tricks

Posted on Leave a comment

How I’ve Been Using Notion Personally and Professionally

I use Notion quite a bit, both personally and professionally.

In a sense, it’s just an app for keeping documents in one place: little notes, to-do lists, basic spreadsheets, etc. I like the native macOS Notes app just fine. It’s quick and easy, it’s desktop and mobile, it syncs… but there are enough limitations that I wanted something better. Plus, I wanted something team-based and web-friendly (shared URLs!) and Notion hits those nails on the head.

Here’s a bunch of ways to use Notion as well as some scattered random notes and ideas about it.

Workspaces are your teams

The word “workspace” almost makes it seem like you could or should use them as your top-level organization structure within a team. Like different projects would use different workspaces. But I’d say: don’t do that. Workspaces are teams, even if it’s a party of you and only you.

Pricing is billed by workspace. Team members are organized by workspace. Search is scoped by workspace. Switching workspaces isn’t too difficult, but it’s not lightning fast, either. I’d say it’s worth honoring those walls and keeping workspaces to a minimum. It’s almost like Slack. It’s easy to get Too-Many-Slack’d, so best to avoid getting Too-Many-Notion’d.

Meeting notes

We have a weekly all-hands meeting at CodePen where we lay out what we’ve done and what we’re going to do. It’s nice to have that as a document so it can include links, notes, comments, embeds, etc.

Those notes don’t disappear next week — we archive them as a historical record of everything we do.

Publishing and advertising schedules

I like looking at a spreadsheet-like document to see upcoming CSS-
Tricks articles with their statuses:

But that same exact document can be viewed as a calendar as well, if that’s easier to look at:

There can be all sorts of views for the same table of content, which is a terrific feature:

Knowledge bases

This might be the easiest selling point for Notion. I’m sure a lot of companies have a whole bunch of documents that get into how the company works, including employee databases, coding guidelines, deployment procedures, dashboards to other software, etc. Sometimes that works as a wiki, but I’ve never seen a lovely setup for this kind of thing. Notion works fantastically as a collaborative knowledge base.

Public documents

I can make a document public, and even open it to public comments with the flip of a switch.

Another super fun thing in Notion is applying a header image and emoji, which gives each document a lot of personality. It’s done in a way that can’t really be screwed up and made into a gross-looking document. Here’s an example where I’ve customized the page header — and look at the public URL!

I’ve also used that for job postings:

It’s also great for things like public accessibility audits where people can be sent to a public page to see what kinds of things are being worked on with the ability to comment on items.

Quick, collaborative documents

Any document can be shared. I can create a quick document and share it with a particular person easily. That could be a private document shared only with team members, or with someone totally outside the team. Or I can make the document publicly visible to all.

I use Notion to create pages to present possibilities with potential sponsorship partners, then morph that into a document to keep track of everything we’re doing together.

We use a show calendar for ShopTalk episodes. Each show added to the calendar automatically creates a page that we use as collaborative show notes with our guests.

It’s worth noting that a Notion account is required to edit a document. So anyone that’s invited will have to register and be logged in. Plus, you’ll need to share it with the correct email address so that person can associate their account with that address.

Blog post drafts

I’ve been trying to keep all my blog post drafts in Notion. That way, they can easily be shared individually and I can browse all the collected ideas at once.

Exporting posts come out as Markdown too, and that’s great for blog post drafts because it translates nicely:

Private sub-team documents

Being able to share documents with specific people is great. For example, we have a Founder’s Meetings section on CodePen:

There are probably a million more things

Notion is simply documents with interesting blocks. Simple, but brilliant. For me, it can replace and consolidate things like Trello and other kanban tools, lightweight project management platforms, GitHub issues (if you don’t need the public-ness), wikis, Google Docs and Spreadsheets, and even simple one-off public websites.

Here’s a website dedicated to other people’s interesting Notion pages.

What I want from Notion

I’d love to see Notion’s web app links open in their desktop app instead of the web. I prefer the app because I have plenty of browser tabs open as it is. It’s gotta be possible to do this with a browser extension. There used to be “Paws” for Trello and there was a browser extension that would open Trello links in that app, so there is prior precedent out there.

I’d also like Notion to explore a tabs feature. I constantly need more than one document open at a time and right now the only way to do that is with multiple windows. There is some back-and-forth arrow action that’s possible, but it would be interesting to see native tabs or native window splitting somehow.

I’d love to see some performance upgrades too. It’s not terribly bad, but working in Notion is so ubiquitous and important in my day-to-day that I’d love for it to feel more instantaneous than it currently does.

The post How I’ve Been Using Notion Personally and Professionally appeared first on CSS-Tricks.

CSS-Tricks

Posted on Leave a comment

How I’ve Been Using Notion Personally and Professionally

I use Notion quite a bit, both personally and professionally.

In a sense, it’s just an app for keeping documents in one place: little notes, to-do lists, basic spreadsheets, etc. I like the native macOS Notes app just fine. It’s quick and easy, it’s desktop and mobile, it syncs… but there are enough limitations that I wanted something better. Plus, I wanted something team-based and web-friendly (shared URLs!) and Notion hits those nails on the head.

Here’s a bunch of ways to use Notion as well as some scattered random notes and ideas about it.

Workspaces are your teams

The word “workspace” almost makes it seem like you could or should use them as your top-level organization structure within a team. Like different projects would use different workspaces. But I’d say: don’t do that. Workspaces are teams, even if it’s a party of you and only you.

Pricing is billed by workspace. Team members are organized by workspace. Search is scoped by workspace. Switching workspaces isn’t too difficult, but it’s not lightning fast, either. I’d say it’s worth honoring those walls and keeping workspaces to a minimum. It’s almost like Slack. It’s easy to get Too-Many-Slack’d, so best to avoid getting Too-Many-Notion’d.

Meeting notes

We have a weekly all-hands meeting at CodePen where we lay out what we’ve done and what we’re going to do. It’s nice to have that as a document so it can include links, notes, comments, embeds, etc.

Those notes don’t disappear next week — we archive them as a historical record of everything we do.

Publishing and advertising schedules

I like looking at a spreadsheet-like document to see upcoming CSS-
Tricks articles with their statuses:

But that same exact document can be viewed as a calendar as well, if that’s easier to look at:

There can be all sorts of views for the same table of content, which is a terrific feature:

Knowledge bases

This might be the easiest selling point for Notion. I’m sure a lot of companies have a whole bunch of documents that get into how the company works, including employee databases, coding guidelines, deployment procedures, dashboards to other software, etc. Sometimes that works as a wiki, but I’ve never seen a lovely setup for this kind of thing. Notion works fantastically as a collaborative knowledge base.

Public documents

I can make a document public, and even open it to public comments with the flip of a switch.

Another super fun thing in Notion is applying a header image and emoji, which gives each document a lot of personality. It’s done in a way that can’t really be screwed up and made into a gross-looking document. Here’s an example where I’ve customized the page header — and look at the public URL!

I’ve also used that for job postings:

It’s also great for things like public accessibility audits where people can be sent to a public page to see what kinds of things are being worked on with the ability to comment on items.

Quick, collaborative documents

Any document can be shared. I can create a quick document and share it with a particular person easily. That could be a private document shared only with team members, or with someone totally outside the team. Or I can make the document publicly visible to all.

I use Notion to create pages to present possibilities with potential sponsorship partners, then morph that into a document to keep track of everything we’re doing together.

We use a show calendar for ShopTalk episodes. Each show added to the calendar automatically creates a page that we use as collaborative show notes with our guests.

It’s worth noting that a Notion account is required to edit a document. So anyone that’s invited will have to register and be logged in. Plus, you’ll need to share it with the correct email address so that person can associate their account with that address.

Blog post drafts

I’ve been trying to keep all my blog post drafts in Notion. That way, they can easily be shared individually and I can browse all the collected ideas at once.

Exporting posts come out as Markdown too, and that’s great for blog post drafts because it translates nicely:

Private sub-team documents

Being able to share documents with specific people is great. For example, we have a Founder’s Meetings section on CodePen:

There are probably a million more things

Notion is simply documents with interesting blocks. Simple, but brilliant. For me, it can replace and consolidate things like Trello and other kanban tools, lightweight project management platforms, GitHub issues (if you don’t need the public-ness), wikis, Google Docs and Spreadsheets, and even simple one-off public websites.

Here’s a website dedicated to other people’s interesting Notion pages.

What I want from Notion

I’d love to see Notion’s web app links open in their desktop app instead of the web. I prefer the app because I have plenty of browser tabs open as it is. It’s gotta be possible to do this with a browser extension. There used to be “Paws” for Trello and there was a browser extension that would open Trello links in that app, so there is prior precedent out there.

I’d also like Notion to explore a tabs feature. I constantly need more than one document open at a time and right now the only way to do that is with multiple windows. There is some back-and-forth arrow action that’s possible, but it would be interesting to see native tabs or native window splitting somehow.

I’d love to see some performance upgrades too. It’s not terribly bad, but working in Notion is so ubiquitous and important in my day-to-day that I’d love for it to feel more instantaneous than it currently does.

The post How I’ve Been Using Notion Personally and Professionally appeared first on CSS-Tricks.

CSS-Tricks

Posted on Leave a comment

STAR Apps: A New Generation of Front-End Tooling for Development Workflows

Product teams from AirBnb and New York Times to Shopify and Artsy (among many others) are converging on a new set of best practices and technologies for building the web apps that their businesses depend on. This trend reflects core principles and solve underlying problems that we may share, so it is worth digging deeper.

Some of that includes:

Naming things is hard, and our industry has struggled to name this new generation of tooling for web apps. The inimitable Orta Theroux calls it an Omakase; I slimmed it down and opted for a simpler backronym pulled from letters in the tooling outlined above: STAR (Design Systems, TypeScript, Apollo, and React).

Continue reading STAR Apps: A New Generation of Front-End Tooling for Development Workflows

Posted on Leave a comment

Angular, Autoprefixer, IE11, and CSS Grid Walk into a Bar…

I am attracted to the idea that you shouldn’t care how the code you author ends up in the browser. It’s already minified. It’s already gzipped. It’s already transmogrified (real word!) by things that polyfill it, things that convert it into code that older browsers understand, things that make it run faster, things that strip away unused bits, and things that break it into chunks by technology far above my head.

The trend is that the code we author is farther and farther away from the code we write, and like I said, I’m attracted to that idea because generally, the purpose of that is to make websites faster for users.

But as Dave notes, when something goes wrong…

As toolchains grow and become more complex, unless you are expertly familiar with them, it’s very unclear what transformations are happening in our code. Tracking the differences between the input and output and the processes that code underwent can be overwhelming. When there’s a problem, it’s increasingly difficult to hop into the assembly line and diagnose the issue and often there’s not an precise fix.

Direct Link to ArticlePermalink

The post Angular, Autoprefixer, IE11, and CSS Grid Walk into a Bar… appeared first on CSS-Tricks.

CSS-Tricks

Posted on Leave a comment

Does it mutate?

This little site by Remy Sharp’s makes it clear whether or not a JavaScript method changes the original array (aka mutates) or not.

I was actually bitten by this the other day. I needed the last element from an array, so I remembered .pop() and used it.

const arr = ["doe", "ray", "mee"]; const last = arr.pop(); // mee, but array is now ["doe", "ray"]

This certainly worked great right away, but I didn’t realize the original array had changed and it caused a problem. Instead, I had to find the non-mutating alternative:

const arr = ["doe", "ray", "mee"]; const last = arr.slice(-1); // mee, arr is unchanged

Related: Array Explorer

Direct Link to ArticlePermalink

The post Does it mutate? appeared first on CSS-Tricks.

CSS-Tricks

Posted on Leave a comment

Intro to React Hooks

Hooks make it possible to organize logic in components, making them tiny and reusable without writing a class. In a sense, they’re React’s way of leaning into functions because, before them, we’d have to write them in a component and, while components have proven to be powerful and functional in and of themselves, they have to render something on the front end. That’s all fine and dandy to some extent, but the result is a DOM that is littered with divs that make it gnarly to dig through through DevTools and debug.

Well, React Hooks change that. Instead of relying on the top-down flow of components or abstracting components in various ways, like higher-order components, we can call and manage flow inside of a component. Dan Abramov explains it well in his Making Sense of React post:

Hooks apply the React philosophy (explicit data flow and composition) inside a component, rather than just between the components. That’s why I feel that Hooks are a natural fit for the React component model.

Unlike patterns like render props or higher-order components, Hooks don’t introduce unnecessary nesting into your component tree. They also don’t suffer from the drawbacks of mixins.

The rest of Dan’s post provides a lot of useful context for why the React team is moving in this direction (they’re now available in React v16.7.0-alpha) and the various problems that hooks are designed to solve. The React docs have an introduction to hooks that, in turn, contains a section on what motivated the team to make them. We’re more concerned with how the heck to use them, so let’s move on to some examples!

The important thing to note as we get started is that there are nine hooks currently available, but we’re going to look at what the React docs call the three basic ones: useState(), useEffect, and setContext(). We’ll dig into each one in this post with a summary of the advanced hooks at the end.

Defining state with useState()

If you’ve worked with React at any level, then you’re probably familiar with how state is generally defined: write a class and use this.state to initialize a class:

class SomeComponent extends React.component {   constructor(props)   super(props);   this.state = {     name: Barney Stinson // Some property with the default state value       } }

React hooks allow us to scrap all that class stuff and put the useState() hook to use instead. Something like this:

import { useState } from 'react';      function SomeComponent() {   const [name, setName] = useState('Barney Stinson'); // Defines state variable (name) and call (setName) -- both of which can be named anything }

Say what?! That’s it! Notice that we’re working outside of a class. Hooks don’t work inside of a class because they’re used in place of them. We’re using the hook directly in the component:

import { useState } from 'react';      function SomeComponent() {   const [name, setName] = useState('Barney Stinson');      return     <div>       <p>Howdy, {name}</p>     </div> }

Oh, you want to update the state of name? Let’s add an input and submit button to the output and call setName to update the default name on submission.

import { useState } from 'react'      function SomeComponent() {   const [input, setValue] = useState("");   const [name, setName] = useState('Barney Stinson');      handleInput = (event) => {     setValue(event.target.value);   }      updateName = (event) => {     event.preventDefault();     setName(input);     setValue("");   }      return (     <div>       <p>Hello, {name}!</p>       <div>         <input type="text" value={input} onChange={handleInput} />         <button onClick={updateName}>Save</button>       </div>     </div>   ) }

See the Pen React Hook: setState Example by Geoff Graham (@geoffgraham) on CodePen.

Notice something else in this example? We’re constructing two different states (input and name). That’s because the useState() hook allows managing multiple states in the same component! In this case, input is the property and setValue holds the state of the input element, which is called by the handleInput function then triggers the updateName function that takes the input value and sets it as the new name state.

Create side effects with useEffect()

So, defining and setting states is all fine and dandy, but there’s another hook called useEffect() that can be used to—you guessed it—define and reuse effects directly in a component without the need for a class or the need to use both redundant code for each lifecycle of a method (i.e. componentDidMount, componentDidUpdate, and componentWillUnmount).

When we talk about effects, we’re referring to things like API calls, updates to the DOM, and event listeners, among other things. The React documentation cites examples like data fetching, setting up subscriptions, and changing the DOM as possible use cases for this hook. Perhaps the biggest differentiator from setState() is that useEffect() runs after render. Think of it like giving React an instruction to hold onto the function that passes and then make adjustments to the DOM after the render has happened plus any updates after that. Again, the React documentation spells it out nicely:

By default, it runs both after the first render and after every update. […] Instead of thinking in terms of “mounting” and “updating”, you might find it easier to think that effects happen “after render”. React guarantees the DOM has been updated by the time it runs the effects.

Right on, so how do we run these effects? Well, we start off by importing the hook the way we did for setState().

import { useEffect } from 'react';

In fact, we can call both setState() and useEffect() in the same import:

import { useState, useEffect } from 'react';

Or, construct them:

const { useState, useEffect } = React;

So, let’s deviate from our previous name example by hooking into an external API that contains user data using axios inside the useEffect() hook then renders that data into a list of of users.

First, let’s bring in our hooks and initialize the App.

const { useState, useEffect } = React  const App = () => {   // Hooks and render UI }

Now, let’s put setState() to define users as a variable that contains a state of setUsers that we’ll pass the user data to once it has been fetched so that it’s ready for render.

const { useState, useEffect } = React  const App = () => {   const [users, setUsers] = useState([]);   // Our effects come next }

Here’s where useEffect() comes into play. We’re going to use it to connect to an API and fetch data from it, then map that data to variables we can call on render.

const { useState, useEffect } = React  const App = () => {   const [users, setUsers] = useState([]);      useEffect(() => {     // Connect to the Random User API using axios     axios("https://randomuser.me/api/?results=10")       // Once we get a response, fetch name, username, email and image data       // and map them to defined variables we can use later.       .then(response =>         response.data.results.map(user => ({           name: `{user.name.first} $  {user.name.last}`,           username: `{user.login.username}`,           email: `{user.email}`,           image: `{user.picture.thumbnail}`         }))       )       // Finally, update the `setUsers` state with the fetched data       // so it stores it for use on render       .then(data => {         setUsers(data);       });   }, []);      // The UI to render }

OK, now let’s render our component!

const { useState, useEffect } = React  const App = () => {   const [users, setUsers] = useState([]);    useEffect(() => {     axios("https://randomuser.me/api/?results=10")       .then(response =>         response.data.results.map(user => ({           name: `{user.name.first} $  {user.name.last}`,           username: `{user.login.username}`,           email: `{user.email}`,           image: `{user.picture.thumbnail}`         }))       )       .then(data => {         setUsers(data);       });   }, []);      return (     <div className="users">       {users.map(user => (         <div key={user.username} className="users__user">           <img src={user.image} className="users__avatar" />           <div className="users__meta">             <h1>{user.name}</h1>             <p>{user.email}</p>           </div>         </div>       ))}     </div>   ) }

Here’s what that gets us:

See the Pen React Hook: setEffect example by Geoff Graham (@geoffgraham) on CodePen.

It’s worth noting that useEffect() is capable of so, so, so much more, like chaining effects and triggering them on condition. Plus, there are cases where we need to cleanup after an effect has run—like subscribing to an external resource—to prevent memory leaks. Totally worth running through the detailed explanation of effects with cleanup in the React documentation.

Context and useContext()

Context in React makes it possible to pass props down from a parent component to a child component. This saves you from the hassle of prop drilling. However, you could only make use of context in class components, but now you can make use of context in functional components using useContext() . Let’s create a counter example, we will pass the state and functions which will be used to increase or decrease the count from the parent component to child component using useContext(). First, let’s create our context:

const CountContext = React.createContext();

We’ll declare the count state and increase/decrease methods of our counter in our App component and set up the wrapper that will hold the component. We’ll put the context hook to use in the actual counter component in just a bit.

const App = () => {   // Use `setState()` to define a count variable and its state   const [count, setCount] = useState(0);      // Construct a method that increases the current `setCount` variable state by 1 with each click   const increase = () => {     setCount(count + 1);   };      // Construct a method that decreases the current `setCount` variable state by 1 with each click.   const decrease = () => {     setCount(count - 1);   };    // Create a wrapper for the counter component that contains the provider that will supply the context value.   return (     <div>       <CountContext.Provider         // The value is takes the count value and updates when either the increase or decrease methods are triggered.         value={{ count, increase, decrease }}       >         // Call the Counter component we will create next         <Counter />       </CountContext.Provider>     </div>   ); };

Alright, onto the Counter component! useContext() accepts an object (we’re passing in the CountContext provider) and allows us to tell React exactly what value we want (`count) and what methods trigger updated values (increase and decrease). Then, of course, we’ll round things out by rendering the component, which is called by the App.

const Counter = () => {   const { count, increase, decrease } = useContext(CountContext);   return (     <div className="counter">       <button onClick={decrease}>-</button>       <span className="count">{count}</span>       <button onClick={increase}>+</button>     </div>   ); };

And voilà! Behold our mighty counter with the count powered by context objects and values.

See the Pen React hooks – useContext by Kingsley Silas Chijioke (@kinsomicrote) on CodePen.

Wrapping up

We’ve merely scratched the surface of what React hooks are capable of doing, but hopefully this gives you a solid foundation. For example, there are even more advanced hooks that are available in addition to the basic ones we covered in this post. Here’s a list of those hooks with the descriptions offered by the documentation so you can level up now that you’re equipped with the basics:

Hook Description
userReducer() An alternative to useState. Accepts a reducer of type (state, action) => newState, and returns the current state paired with a dispatch method.
useCallback() Returns a memoized callback. Pass an inline callback and an array of inputs. useCallback will return a memoized version of the callback that only changes if one of the inputs has changed.
useMemo() Returns a memoized value. Pass a “create” function and an array of inputs. useMemo will only recompute the memoized value when one of the inputs has changed.
useRef() useRef returns a mutable ref object whose .current property is initialized to the passed argument (initialValue). The returned object will persist for the full lifetime of the component.
useImperativeMethods useImperativeMethods customizes the instance value that is exposed to parent components when using ref. As always, imperative code using refs should be avoided in most cases. useImperativeMethods should be used with forwardRef.
useLayoutEffect The signature is identical to useEffect, but it fires synchronously after all DOM mutations. Use this to read layout from the DOM and synchronously re-render. Updates scheduled inside useLayoutEffect will be flushed synchronously, before the browser has a chance to paint.

The post Intro to React Hooks appeared first on CSS-Tricks.

CSS-Tricks

Posted on Leave a comment

How I’ve Been Using Notion Personally and Professionally

I use Notion quite a bit, both personally and professionally.

In a sense, it’s just an app for keeping documents in one place: little notes, to-do lists, basic spreadsheets, etc. I like the native macOS Notes app just fine. It’s quick and easy, it’s desktop and mobile, it syncs… but there are enough limitations that I wanted something better. Plus, I wanted something team-based and web-friendly (shared URLs!) and Notion hits those nails on the head.

Here’s a bunch of ways to use Notion as well as some scattered random notes and ideas about it.

Workspaces are your teams

The word “workspace” almost makes it seem like you could or should use them as your top-level organization structure within a team. Like different projects would use different workspaces. But I’d say: don’t do that. Workspaces are teams, even if it’s a party of you and only you.

Pricing is billed by workspace. Team members are organized by workspace. Search is scoped by workspace. Switching workspaces isn’t too difficult, but it’s not lightning fast, either. I’d say it’s worth honoring those walls and keeping workspaces to a minimum. It’s almost like Slack. It’s easy to get Too-Many-Slack’d, so best to avoid getting Too-Many-Notion’d.

Meeting notes

We have a weekly all-hands meeting at CodePen where we lay out what we’ve done and what we’re going to do. It’s nice to have that as a document so it can include links, notes, comments, embeds, etc.

Those notes don’t disappear next week — we archive them as a historical record of everything we do.

Publishing and advertising schedules

I like looking at a spreadsheet-like document to see upcoming CSS-
Tricks articles with their statuses:

But that same exact document can be viewed as a calendar as well, if that’s easier to look at:

There can be all sorts of views for the same table of content, which is a terrific feature:

Knowledge bases

This might be the easiest selling point for Notion. I’m sure a lot of companies have a whole bunch of documents that get into how the company works, including employee databases, coding guidelines, deployment procedures, dashboards to other software, etc. Sometimes that works as a wiki, but I’ve never seen a lovely setup for this kind of thing. Notion works fantastically as a collaborative knowledge base.

Public documents

I can make a document public, and even open it to public comments with the flip of a switch.

Another super fun thing in Notion is applying a header image and emoji, which gives each document a lot of personality. It’s done in a way that can’t really be screwed up and made into a gross-looking document. Here’s an example where I’ve customized the page header — and look at the public URL!

I’ve also used that for job postings:

It’s also great for things like public accessibility audits where people can be sent to a public page to see what kinds of things are being worked on with the ability to comment on items.

Quick, collaborative documents

Any document can be shared. I can create a quick document and share it with a particular person easily. That could be a private document shared only with team members, or with someone totally outside the team. Or I can make the document publicly visible to all.

I use Notion to create pages to present possibilities with potential sponsorship partners, then morph that into a document to keep track of everything we’re doing together.

We use a show calendar for ShopTalk episodes. Each show added to the calendar automatically creates a page that we use as collaborative show notes with our guests.

It’s worth noting that a Notion account is required to edit a document. So anyone that’s invited will have to register and be logged in. Plus, you’ll need to share it with the correct email address so that person can associate their account with that address.

Blog post drafts

I’ve been trying to keep all my blog post drafts in Notion. That way, they can easily be shared individually and I can browse all the collected ideas at once.

Exporting posts come out as Markdown too, and that’s great for blog post drafts because it translates nicely:

Private sub-team documents

Being able to share documents with specific people is great. For example, we have a Founder’s Meetings section on CodePen:

There are probably a million more things

Notion is simply documents with interesting blocks. Simple, but brilliant. For me, it can replace and consolidate things like Trello and other kanban tools, lightweight project management platforms, GitHub issues (if you don’t need the public-ness), wikis, Google Docs and Spreadsheets, and even simple one-off public websites.

Here’s a website dedicated to other people’s interesting Notion pages.

What I want from Notion

I’d love to see Notion’s web app links open in their desktop app instead of the web. I prefer the app because I have plenty of browser tabs open as it is. It’s gotta be possible to do this with a browser extension. There used to be “Paws” for Trello and there was a browser extension that would open Trello links in that app, so there is prior precedent out there.

I’d also like Notion to explore a tabs feature. I constantly need more than one document open at a time and right now the only way to do that is with multiple windows. There is some back-and-forth arrow action that’s possible, but it would be interesting to see native tabs or native window splitting somehow.

I’d love to see some performance upgrades too. It’s not terribly bad, but working in Notion is so ubiquitous and important in my day-to-day that I’d love for it to feel more instantaneous than it currently does.

The post How I’ve Been Using Notion Personally and Professionally appeared first on CSS-Tricks.

CSS-Tricks

Posted on Leave a comment

How I’ve Been Using Notion Personally and Professionally

I use Notion quite a bit, both personally and professionally.

In a sense, it’s just an app for keeping documents in one place: little notes, to-do lists, basic spreadsheets, etc. I like the native macOS Notes app just fine. It’s quick and easy, it’s desktop and mobile, it syncs… but there are enough limitations that I wanted something better. Plus, I wanted something team-based and web-friendly (shared URLs!) and Notion hits those nails on the head.

Here’s a bunch of ways to use Notion as well as some scattered random notes and ideas about it.

Workspaces are your teams

The word “workspace” almost makes it seem like you could or should use them as your top-level organization structure within a team. Like different projects would use different workspaces. But I’d say: don’t do that. Workspaces are teams, even if it’s a party of you and only you.

Pricing is billed by workspace. Team members are organized by workspace. Search is scoped by workspace. Switching workspaces isn’t too difficult, but it’s not lightning fast, either. I’d say it’s worth honoring those walls and keeping workspaces to a minimum. It’s almost like Slack. It’s easy to get Too-Many-Slack’d, so best to avoid getting Too-Many-Notion’d.

Meeting notes

We have a weekly all-hands meeting at CodePen where we lay out what we’ve done and what we’re going to do. It’s nice to have that as a document so it can include links, notes, comments, embeds, etc.

Those notes don’t disappear next week — we archive them as a historical record of everything we do.

Publishing and advertising schedules

I like looking at a spreadsheet-like document to see upcoming CSS-
Tricks articles with their statuses:

But that same exact document can be viewed as a calendar as well, if that’s easier to look at:

There can be all sorts of views for the same table of content, which is a terrific feature:

Knowledge bases

This might be the easiest selling point for Notion. I’m sure a lot of companies have a whole bunch of documents that get into how the company works, including employee databases, coding guidelines, deployment procedures, dashboards to other software, etc. Sometimes that works as a wiki, but I’ve never seen a lovely setup for this kind of thing. Notion works fantastically as a collaborative knowledge base.

Public documents

I can make a document public, and even open it to public comments with the flip of a switch.

Another super fun thing in Notion is applying a header image and emoji, which gives each document a lot of personality. It’s done in a way that can’t really be screwed up and made into a gross-looking document. Here’s an example where I’ve customized the page header — and look at the public URL!

I’ve also used that for job postings:

It’s also great for things like public accessibility audits where people can be sent to a public page to see what kinds of things are being worked on with the ability to comment on items.

Quick, collaborative documents

Any document can be shared. I can create a quick document and share it with a particular person easily. That could be a private document shared only with team members, or with someone totally outside the team. Or I can make the document publicly visible to all.

I use Notion to create pages to present possibilities with potential sponsorship partners, then morph that into a document to keep track of everything we’re doing together.

We use a show calendar for ShopTalk episodes. Each show added to the calendar automatically creates a page that we use as collaborative show notes with our guests.

It’s worth noting that a Notion account is required to edit a document. So anyone that’s invited will have to register and be logged in. Plus, you’ll need to share it with the correct email address so that person can associate their account with that address.

Blog post drafts

I’ve been trying to keep all my blog post drafts in Notion. That way, they can easily be shared individually and I can browse all the collected ideas at once.

Exporting posts come out as Markdown too, and that’s great for blog post drafts because it translates nicely:

Private sub-team documents

Being able to share documents with specific people is great. For example, we have a Founder’s Meetings section on CodePen:

There are probably a million more things

Notion is simply documents with interesting blocks. Simple, but brilliant. For me, it can replace and consolidate things like Trello and other kanban tools, lightweight project management platforms, GitHub issues (if you don’t need the public-ness), wikis, Google Docs and Spreadsheets, and even simple one-off public websites.

Here’s a website dedicated to other people’s interesting Notion pages.

What I want from Notion

I’d love to see Notion’s web app links open in their desktop app instead of the web. I prefer the app because I have plenty of browser tabs open as it is. It’s gotta be possible to do this with a browser extension. There used to be “Paws” for Trello and there was a browser extension that would open Trello links in that app, so there is prior precedent out there.

I’d also like Notion to explore a tabs feature. I constantly need more than one document open at a time and right now the only way to do that is with multiple windows. There is some back-and-forth arrow action that’s possible, but it would be interesting to see native tabs or native window splitting somehow.

I’d love to see some performance upgrades too. It’s not terribly bad, but working in Notion is so ubiquitous and important in my day-to-day that I’d love for it to feel more instantaneous than it currently does.

The post How I’ve Been Using Notion Personally and Professionally appeared first on CSS-Tricks.

CSS-Tricks