Skip to content

Instantly share code, notes, and snippets.

View kivircik-parantez's full-sized avatar
🎯
Focusing

Zeynep Yurt Şimşek kivircik-parantez

🎯
Focusing
View GitHub Profile
@kivircik-parantez
kivircik-parantez / detailed.tsx
Last active December 20, 2022 20:24
UseEffect - Set up a subscription in a function component
import { useEffect, useState } from 'react';
function ComponentName() {
const [data, setData] = useState(null);
useEffect(() => {
// Create a subscription
const subscription = someDataStream.subscribe(data => {
setData(data);
});
@kivircik-parantez
kivircik-parantez / compareDates.ts
Created December 27, 2022 10:13
Date Calculations
moment('2010-10-20').isBefore('2010-10-21');
moment('2010-10-20').isBefore('2010-12-31', 'year'); // false
moment('2010-10-20').isSame('2010-10-20'); // true
moment('2010-10-20').isAfter('2010-10-19'); // true
moment('2010-10-20').isSameOrBefore('2010-10-21'); // true
moment('2010-10-20').isSameOrAfter('2010-10-21'); // false
moment('2010-10-20').isBetween('2010-10-19', '2010-10-25'); // true
moment('2010-10-20').isBetween('2010-10-19', undefined); // true, since moment(undefined) evaluates as moment()
@kivircik-parantez
kivircik-parantez / updating-state-based-on-props-or-state.ts
Last active December 30, 2022 07:29
Updating state based on props or state
function Form() {
const [firstName, setFirstName] = useState('Taylor');
const [lastName, setLastName] = useState('Swift');
// ✅ Good: calculated during rendering
const fullName = firstName + ' ' + lastName;
// ...
}
@kivircik-parantez
kivircik-parantez / caching-expensible-calculation.ts
Last active December 30, 2022 17:36
Caching expensive calculations
function TodoList({ todos, filter }) {
const [newTodo, setNewTodo] = useState('');
// ✅ This is fine if getFilteredTodos() is not slow.
const visibleTodos = getFilteredTodos(todos, filter);
// ...
}
import { useMemo, useState } from 'react';
@kivircik-parantez
kivircik-parantez / reset-all-state-when-prop-changes.ts
Created December 30, 2022 20:39
Resetting all state when a prop changes
export default function ProfilePage({ userId }) {
return (
<Profile
userId={userId}
key={userId}
/>
);
}
function Profile({ userId }) {
@kivircik-parantez
kivircik-parantez / adjusting-some-state-when-prop-changes.ts
Created December 30, 2022 20:59
Adjusting some state when a prop changes
function List({ items }) {
const [isReverse, setIsReverse] = useState(false);
const [selection, setSelection] = useState(null);
// Better: Adjust the state while rendering
const [prevItems, setPrevItems] = useState(items);
if (items !== prevItems) {
setPrevItems(items);
setSelection(null);
}
@kivircik-parantez
kivircik-parantez / calculate-everything-during-rendering.ts
Created December 30, 2022 21:36
Calculate Everything During Rendering
function List({ items }) {
const [isReverse, setIsReverse] = useState(false);
const [selectedId, setSelectedId] = useState(null);
// ✅ Best: Calculate everything during rendering
const selection = items.find(item => item.id === selectedId) ?? null;
// ...
}
@kivircik-parantez
kivircik-parantez / event-spesific-logic.ts
Created December 30, 2022 22:04
Event-specific logic
function ProductPage({ product, addToCart }) {
// ✅ Good: Event-specific logic is called from event handlers
function buyProduct() {
addToCart(product);
showNotification(`Added ${product.name} to the shopping cart!`);
}
function handleBuyClick() {
buyProduct();
}
@kivircik-parantez
kivircik-parantez / sending-post-request.ts
Created December 30, 2022 22:15
Sending a POST request
function Form() {
const [firstName, setFirstName] = useState('');
const [lastName, setLastName] = useState('');
// ✅ Good: This logic runs because the component was displayed
useEffect(() => {
post('/analytics/event', { eventName: 'visit_form' });
}, []);
function handleSubmit(e) {
@kivircik-parantez
kivircik-parantez / chains-of-computation.ts
Created December 30, 2022 22:37
Chains of Computation
function Game() {
const [card, setCard] = useState(null);
const [goldCardCount, setGoldCardCount] = useState(0);
const [round, setRound] = useState(1);
// ✅ Calculate what you can during rendering
const isGameOver = round > 5;
function handlePlaceCard(nextCard) {
if (isGameOver) {