ReactContext 용 Logger를 만들었습니다.
15941 단어 Reactreact-hooks
(만든 3개월 정도 전이니까 지금이라면 이미 더 좋은 것이 있을지도...
만든 것
hooks/useLogger.jsimport { useCallback, useEffect, useRef } from "react"
import moment from "moment"
const colors = {
prefix: "#4CAF50",
log: "inherit",
prev: "#9E9E9E",
next: "#03A9F4",
error: "#F20404",
}
function usePrevious(value) {
const ref = useRef(null)
useEffect(() => {
ref.current = value
})
return ref.current
}
export function useContextLogger(prefix, inputs) {
Object.keys(inputs).forEach(key => {
const value = inputs[key]
const prev = usePrevious(value)
useEffect(() => {
const timestamp = moment().format("HH:mm:ss.SSS")
console.group(
`%c[${prefix}] %c${key} %c@${timestamp}`,
`color: ${colors.prefix}`,
`color: ${colors.log}; font-weight: bold;`,
"color: gray; font-weight: lighter;",
)
console.log(`%c prev`, `color: ${colors.prev}`, prev)
console.log(`%c next`, `color: ${colors.next}`, value)
console.groupEnd()
}, [value])
})
}
사용법
10 분 정도로 파파로 만든 예이므로 미묘한 곳 가득하지만 용서를
contexts/todo.jsxconst TodosContext = createContext(null)
const TodosContextProvider = ({ children}) => {
const [todos, setTodos] = useState([])
const add = useCallback((todo) => {
const id = todos.length + 1
setTodos([
...todos,
{
id,
text: todo,
completed: false,
createdAt: moment().format('YYYY/MM/DD HH:mm:ss'),
}
])
}, [todos])
const toggle = useCallback((id) => {
const todo = todos.find(t => t.id === id)
if (!todo) return
setTodos([
...todos.filter(t => t.id !== id),
{ ...todo, completed: !todo.completed },
].sort((a, b) => a.id - b.id))
}, [todos])
const remove = useCallback((id) => {
setTodos(todos.filter(t => t.id !== id))
})
// ロガーで変更を監視したいパラメータをセット
useContextLogger("TodosContext", { todos })
return (
<TodosContext.Provider value={{ todos, add, toggle, remove }}>
{children}
</TodosContext.Provider>
)
}
이런 느낌으로 로그를 넣으면, ↓과 같이 변경 전후의 값이 로그로서 토출된다.
본가 redux-logger에는 전혀 미치지 않지만, 뭐 나름대로 실용적인 것이 되어 만족
덤
간단한 로거도 ReactHooks를 사용하여 만들었으므로 넣어라.
hooks/useLogger.jsfunction useLogger(prefix) {
const log = useCallback(
(log, src) => {
const timestamp = moment().format("HH:mm:ss.SSS")
console.log(
`%c[${prefix}] %c${log} @ %c${timestamp}`,
`color: ${colors.prefix}`,
`color: ${colors.log}; font-weight: bold;`,
"color: gray; font-weight: lighter;",
src || "",
)
},
[prefix],
)
return { log }
}
이쪽은 console.log
대신 사용할 수 있고, useLogger
호출할 때 prefix를 설정할 수 있기 때문에 어느 부분에서 뱉어진 로그인지를 관리하는데 좋은 느낌.
const hogeLogger = useLogger('HogeComponent')
hogeLogger.log('test')
hogeLogger.log('obj ->', obj)
처럼 사용할 수 있다.
Reference
이 문제에 관하여(ReactContext 용 Logger를 만들었습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/k_tada/items/cfb9a4046984431468b7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import { useCallback, useEffect, useRef } from "react"
import moment from "moment"
const colors = {
prefix: "#4CAF50",
log: "inherit",
prev: "#9E9E9E",
next: "#03A9F4",
error: "#F20404",
}
function usePrevious(value) {
const ref = useRef(null)
useEffect(() => {
ref.current = value
})
return ref.current
}
export function useContextLogger(prefix, inputs) {
Object.keys(inputs).forEach(key => {
const value = inputs[key]
const prev = usePrevious(value)
useEffect(() => {
const timestamp = moment().format("HH:mm:ss.SSS")
console.group(
`%c[${prefix}] %c${key} %c@${timestamp}`,
`color: ${colors.prefix}`,
`color: ${colors.log}; font-weight: bold;`,
"color: gray; font-weight: lighter;",
)
console.log(`%c prev`, `color: ${colors.prev}`, prev)
console.log(`%c next`, `color: ${colors.next}`, value)
console.groupEnd()
}, [value])
})
}
10 분 정도로 파파로 만든 예이므로 미묘한 곳 가득하지만 용서를
contexts/todo.jsx
const TodosContext = createContext(null)
const TodosContextProvider = ({ children}) => {
const [todos, setTodos] = useState([])
const add = useCallback((todo) => {
const id = todos.length + 1
setTodos([
...todos,
{
id,
text: todo,
completed: false,
createdAt: moment().format('YYYY/MM/DD HH:mm:ss'),
}
])
}, [todos])
const toggle = useCallback((id) => {
const todo = todos.find(t => t.id === id)
if (!todo) return
setTodos([
...todos.filter(t => t.id !== id),
{ ...todo, completed: !todo.completed },
].sort((a, b) => a.id - b.id))
}, [todos])
const remove = useCallback((id) => {
setTodos(todos.filter(t => t.id !== id))
})
// ロガーで変更を監視したいパラメータをセット
useContextLogger("TodosContext", { todos })
return (
<TodosContext.Provider value={{ todos, add, toggle, remove }}>
{children}
</TodosContext.Provider>
)
}
이런 느낌으로 로그를 넣으면, ↓과 같이 변경 전후의 값이 로그로서 토출된다.
본가 redux-logger에는 전혀 미치지 않지만, 뭐 나름대로 실용적인 것이 되어 만족
덤
간단한 로거도 ReactHooks를 사용하여 만들었으므로 넣어라.
hooks/useLogger.jsfunction useLogger(prefix) {
const log = useCallback(
(log, src) => {
const timestamp = moment().format("HH:mm:ss.SSS")
console.log(
`%c[${prefix}] %c${log} @ %c${timestamp}`,
`color: ${colors.prefix}`,
`color: ${colors.log}; font-weight: bold;`,
"color: gray; font-weight: lighter;",
src || "",
)
},
[prefix],
)
return { log }
}
이쪽은 console.log
대신 사용할 수 있고, useLogger
호출할 때 prefix를 설정할 수 있기 때문에 어느 부분에서 뱉어진 로그인지를 관리하는데 좋은 느낌.
const hogeLogger = useLogger('HogeComponent')
hogeLogger.log('test')
hogeLogger.log('obj ->', obj)
처럼 사용할 수 있다.
Reference
이 문제에 관하여(ReactContext 용 Logger를 만들었습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/k_tada/items/cfb9a4046984431468b7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
function useLogger(prefix) {
const log = useCallback(
(log, src) => {
const timestamp = moment().format("HH:mm:ss.SSS")
console.log(
`%c[${prefix}] %c${log} @ %c${timestamp}`,
`color: ${colors.prefix}`,
`color: ${colors.log}; font-weight: bold;`,
"color: gray; font-weight: lighter;",
src || "",
)
},
[prefix],
)
return { log }
}
const hogeLogger = useLogger('HogeComponent')
hogeLogger.log('test')
hogeLogger.log('obj ->', obj)
Reference
이 문제에 관하여(ReactContext 용 Logger를 만들었습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/k_tada/items/cfb9a4046984431468b7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)