Skip to content

Instantly share code, notes, and snippets.

View EduVencovsky's full-sized avatar
🎯
Focusing

Eduardo Vencovsky EduVencovsky

🎯
Focusing
View GitHub Profile
@EduVencovsky
EduVencovsky / useArray.js
Last active April 18, 2019 15:23
React Hook for using arrays
import { useReducer } from 'react'
function arrayReducer(array, action) {
switch (action.type) {
case 'push':
return [...array, action.value]
case 'pushAll':
return [...array, ...action.value]
case 'deleteByIndex':
let deleteByIndex = array.filter((x, i) => i != action.index)
@EduVencovsky
EduVencovsky / storage.js
Last active March 28, 2019 19:58
React Native AsyncStorage Implementation
import { AsyncStorage } from 'react-native' // change this to @react-native-community/async-storage when this issue is solved https://github.com/react-native-community/react-native-async-storage/issues/14
export default Storage = {
async getItem(itemKey) {
let result = {
key: itemKey,
value: null,
error: null,
}
@EduVencovsky
EduVencovsky / useInterval.js
Last active July 13, 2019 14:22
React Hook for using setInterval
// https://overreacted.io/making-setinterval-declarative-with-react-hooks/
import { useEffect, useRef } from 'react'
function useInterval(callback, delay) {
const savedCallback = useRef()
// Remember the latest callback.
useEffect(() => {
savedCallback.current = callback
}, [callback])
@EduVencovsky
EduVencovsky / Auth.jsx
Last active February 20, 2024 03:28
Private Routes with Auth using react-router and Context API
import React, { useState, useEffect } from 'react'
import PropTypes from 'prop-types'
import { checkIsAuthenticated, authSignUp, authLogin, authLogout } from '../../services/auth'
export const AuthContext = React.createContext({})
export default function Auth({ children }) {
const [isAuthenticated, setIsAuthenticated] = useState(false)
const [isLoading, setIsLoading] = useState(true)
@EduVencovsky
EduVencovsky / styles.css
Created May 22, 2019 15:41
CSS for making ul and li open and close (dropdown menu)
.li {
max-height: 0px;
transition: max-height 0.35s ease-out;
}
.ul {
overflow: hidden;
}
.ul.opened .li {
max-height: 50px;
@EduVencovsky
EduVencovsky / useDimensions.js
Created July 13, 2019 13:56
React Native Hook for Dimensions
import { useState, useEffect } from 'react'
import { Dimensions } from 'react-native'
const useDimensions = getter => {
const [dimensions, setDimensions] = useState(Dimensions.get(getter))
useEffect(() => {
const widthHandler = d => setDimensions(d[getter])
Dimensions.addEventListener('change', widthHandler)
return () => Dimensions.removeEventListener('change', widthHandler)
})
@EduVencovsky
EduVencovsky / useTimeout.js
Created July 13, 2019 14:25
React hook for setTimeout
import { useEffect, useRef, useState } from 'react'
// The callback should setState so it will re trigger the timeout
function useTimeout(callback, delay) {
const savedCallback = useRef()
const [callBackCleanUp, setCallBackCleanUp] = useState(null)
// Remember the latest callback.
useEffect(() => {
savedCallback.current = callback
}, [callback])
import { useState, useEffect } from 'react'
import Realm from '../database/migrations'
function reducer(action, { realm, name, queryObjects }) {
switch (action.type) {
case 'create':
return new Promise((resolve, reject) => {
try {
realm.write(() => {
resolve(realm.create(name, action.data))
@EduVencovsky
EduVencovsky / useAsyncStorage.js
Last active April 27, 2022 07:33
React Native hook for keeping the state in sync with AsyncStorage
import { useState, useEffect } from 'react'
import AsyncStorage from '@react-native-community/async-storage'
const useAsyncStorage = (key, initialValue) => {
const [hasLoad, setHasLoad] = useState(false)
const [data, setData] = useState(initialValue)
const set = async newData => {
setData(newData)
return newData === null ?
import { useState } from 'react'
export default function useToggle(defaultValue){
const [state, setState] = useState(defaultValue)
const toggle = (value = null) => {
if(value == null)
setState(!state)
else
setState(!!value)