
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
jotai-scheduler
Advanced tools
A Jōtai utility package for better performance.
# npm
npm i jotai-scheduler
# yarn
yarn add jotai-scheduler
# pnpm
pnpm add jotai-scheduler
The usage of jotai-scheduler is very similar to jotai itself. The only difference from the native Jotai API is that it requires passing a priority parameter:
jotai
import { useAtomValue } from 'jotai-scheduler'
const num = useAtomValue(anAtom, {});
jotai-scheduler
import { LOW_PRIORITY, useAtomValueWithSchedule } from 'jotai-scheduler'
const num = useAtomValueWithSchedule(anAtom, {
priority: LOW_PRIORITY,
});
The field priority can be can be IMMEDIATE_PRIORITY, NORMAL_PRIORITY, or LOW_PRIORITY. If you don't pass any priority, it will use NORMAL_PRIORITY by default, and its behavior is the same as jotai.
Now you can use jotai-scheduler to replace jotai in your project.
useAtom --> useAtomWithScheduleuseAtomValue --> useAtomValueWithScheduleuseSetAtom --> useSetAtomWithScheduleYou can view a detailed comparison and live demo on CodeSandbox.
Let's say we have an app that contains typical elements such as the Header, Footer, Sidebar, and Content:
Every element represents a component, and all these components share the same state. When we click the button, the state will be updated, and all components will be re-rendered. While we were using jotai, the code might have looked like this:
const anAtom = atom(0);
const Header = () => {
const num = useAtomValue(anAtom);
return <div className="header">Header-{num}</div>;
};
const Footer = () => {
const num = useAtomValue(anAtom);
return <div className="footer">Footer-{num}</div>;
};
const Sidebar = () => {
const num = useAtomValue(anAtom);
return <div className="sidebar">Sidebar-{num}</div>;
};
const Content = () => {
const [num, setNum] = useAtom(anAtom);
return (
<div className="content">
<div>Content-{num}</div>
<button onClick={() => setNum((num) => ++num)}>+1</button>
</div>
);
};
When we click the button, the rendering seems a bit laggy, right? That's because we need to wait for all the components to render. But not all components have the same priority. A better way is to render the important content first, and then the rest, the more important content will be shown more quickly.
Let's say the priority of those components is Content > Sidebar > Header = Footer, then we can pass a priority field to represent the priority of each component.
Now let's use jotai-scheduler to optimize it:
const anAtom = atom(0);
const Header = () => {
const num = useAtomValueWithSchedule(anAtom, {
priority: LowPriority,
});
return <div className="header">Header-{num}</div>;
};
const Footer = () => {
const num = useAtomValueWithSchedule(anAtom, {
priority: LowPriority,
});
return <div className="footer">Footer-{num}</div>;
};
const Sidebar = () => {
const num = useAtomValueWithSchedule(anAtom);
return <div className="sidebar">Sidebar-{num}</div>;
};
const Content = () => {
const [num, setNum] = useAtomWithSchedule(anAtom, {
priority: ImmediatePriority,
});
return (
<div className="content">
<div>Content-{num}</div>
<button onClick={() => setNum((num) => ++num)}>+1</button>
</div>
);
};
The performance is better. Important content will be displayed to users more quickly, thereby providing a better user experience.
FAQs
<a href= "https://github.com/pret
We found that jotai-scheduler demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.