μ€λμ λ©μΈ ν€λλ§ μμ±μ νλ€. νκ°μ§ μ΄μκ° μλ€λ©΄ svg νμΌμ react component νμμΌλ‘ λΆλ¬μ€λλ° μ€ν¨ν΄μ κ·Έκ² μμ¬μ λ€. μΌλ¨ μ»΄ν¬λνΈλ‘ μ§μ μμ±ν΄μ μμ μ μ§ννλ€.
μ€λμ μ΄λ©μΌ μΈμ¦μ ꡬννλ€. μΌλ¨ νΌμ λ€ κ΅¬ννκ³ μ€μ API ν μ€νΈλ₯Ό νλ©΄ λ κ² κ°λ€.
μ€λμ μ½λ μ΄λ©μΌ μΈμ¦μ νλ€. μλΉν μ½κ² μΈμ¦μ νμκ³ , μ€λ₯ λ©μΈμ§λ toast UIλ‘ λ³΄μ¬ μ€ μμ μ΄λ€. μ¬κΈ°μ μΆκ°μ μΌλ‘ μ μ©? κ³ λ―Ό? ν΄μΌνλ λ¬Έμ κ° μλ€.
- refresh, access ν ν°μ κ΄λ¦¬
- μΈμ¦ ν μ μ μ 보λ₯Ό κ°μ Έμ€λ κ²
μΌλ¨ μΈμ¦ ν μ μ μ 보λ₯Ό κ°μ Έμ€λ건 μ΄λ©μΌ μΈμ¦μμλ ν΄λΌμ΄μΈνΈ μ¬μ΄λμμ μ μ μ 보λ₯Ό κ°μ Έμ€λ κ²μΌλ‘ ν΄κ²°νλ©΄ λ κ² κ°κ³ λλ¨Έμ§ μ μ μ 보λ μ... μλ²μ¬μ΄λμμ storeλ‘ λ£μ΄μ£Όλ λ°©μμΌλ‘ ν μ§ κ³ λ―Όμ΄λλ€.
κ·Έλ¦¬κ³ ν ν°μ κ΄λ¦¬λ μΌλ¨ 2κ°μ§λ₯Ό μκ°νκ³ μλλ°, 첫λ²μ§Έλ μ€ν λ¦¬μ§ APIλ₯Ό μ¬μ©νλκ±° λλ²μ§Έλ μΈμ μΌλ‘ κ΄λ¦¬νλ건λ°.... κ³ λ―Όμ΄ λλ€.
- μ΄λ©μΌ μΈμ¦
μμ±νμ΄μ§λ° μ€ν μ΄ μ°λ μμ μ νλ€. κ·Έλ¦¬κ³ redux sagaλ μ¬μ©νμ§ μμ μμ μ΄λ€.
μ€λμ κΈμ μμ±νλ νμ΄μ§λ₯Ό μμ νκ³ μμλ€. κ°λ°μ μ§ννλ©΄μ λ°μνλ μ΄μλ next.jsμμ code mirrorλ₯Ό νΈμΆ ν λ μλ¬λ₯Ό λ°μνλ μ΄μκ° μμλ€. CodeMirror Issue - Navigator error
μλ² μ¬μ΄λ λ λλ§μ νλ©΄μ μ½λ λ―Έλ¬λ₯Ό λͺ»μ½μ΄ λ°μνλ μ΄μμΈ κ² κ°λ€. ν΄κ²°μ μλ² μ¬μ΄λμμ λ°μνλ μ΄μμ΄λ©΄ ν΄λΌμ΄μΈνΈ μ¬μ΄λ λ λλ§μ λ‘λλ₯Ό νκ²νλ©΄ κ³ μΉ μ μλ μλ¬μλ€.
initialize = () => {
if (!this.editorElement.current) return;
const CodeMirror = require('codemirror');
require('codemirror/mode/markdown/markdown');
require('codemirror/mode/javascript/javascript');
require('codemirror/mode/jsx/jsx');
require('codemirror/addon/display/placeholder');
this.codemirror = CodeMirror.fromTextArea(this.editorElement.current, {
mode: 'markdown',
theme: 'one-light',
placeholder: 'λΉμ μ μ΄μΌκΈ°λ₯Ό μ μ΄λ³΄μΈμ...',
lineWrapping: true,
});
};
componentDidMount() {
this.initialize();
}
λ€μλ²μλ κ³μ μλν° μμ μ κ³μνλ©΄ λ κ² κ°λ€.
μ€λλ κΈμ μμ±νλ νμ΄μ§λ₯Ό μμ νλ€. μ€λμ 무λνκ² μμ μ ν κ² κ°λ€. λ€μμλ μ΄μ΄μ κΈ μμ± νμ΄μ§λ₯Ό μμ ν μμ μ΄λ€.
μμ§ μλν° μμ± νμ΄μ§λ₯Ό μμ μ€μ΄λ€. νμ¬ νκ·Έ μ λ ₯λ° λ§ν¬λ€μ΄ κΈ°λ₯μ μΆκ°νκ³ λ΄μΌλΆν°λ preview κΈ°λ₯μ ꡬννλ©΄ λ κ² κ°λ€. κ·Έλ¦¬κ³ μ΄λ―Έμ§ μ λ‘λ κΈ°λ₯, μμμ μ₯, κΈ μμ , μ μ₯ κΈ°λ₯μ ꡬννλ©΄ μμ± νμ΄μ§λ λ§λ¬΄λ¦¬λ₯Ό ν κ² κ°λ€.
- νκ·Έ μ λ ₯
- λ§ν¬λ€μ΄ μ μ©
λ§ν¬λ€μ΄ ν리뷰 ꡬν
- λ§ν¬λ€μ΄ ν리뷰 μ μ©
μ€λμ react queryλ₯Ό ν΅ν΄μ ν¬μ€νΈ μ 보λ₯Ό κ°μ Έμμ μλ² μ¬μ΄λ λ λλ§μ μ μ© ν λ €κ³ νλλ°... μ μμλλ κ² κ°λ€. νμ¬ λ°μνλ μ΄μλ
SerializableError: Error serializing `.dehydratedState.queries[0].state.data.config.transformRequest[0]` returned from `getServerSideProps`
μ΄λΌλ μλ¬κ° λ°μνλλ° μ΄κ² nextjsμμ μ 곡νλ λ€μ΄λλ―Ή apiλ₯Ό μ¬μ©ν΄μ λ°μνλ μ΄μμΈμ§ μλλ©΄ nextjsμμ react queryλ₯Ό μ¬μ©νλλ° μ΄μκ° μλκ±΄μ§ μ°Ύμλ΄μΌκ² λ€.
μ΄κ²λ§νλ©΄ footer λΆλΆνκ³ λ±λ‘ UIλ₯Ό λ§λ€λ©΄ μ€μ μμ±νλ νμ΄μ§λ λμ΄λλ€.
κ²°κ΅ μ΄μ λ°μνλ μ΄μλ μ²λ¦¬νμ§ λͺ»νλ€. ν΄κ²°ν λ €κ³ νλ©΄ νκ² μ§λ§ κ·Έκ±°μ ν¬μνλ μκ°μ΄ λ무 κΈΈ κ² κ°λ€. μ°¨λΌλ¦¬ swrμ ν΅ν΄μ ssrλ₯Ό μ μ©νλκ² μ’μ κ² κ°λ€. κ·Έλ¦¬κ³ μ°ΎμΌλ©΄μ next.jsλ₯Ό κΉκ² μ΄ν΄λ κΈμ μ°Ύμλλ° λμ€μ νλ² λ΄μΌκ² λ€.
https://qiita.com/jagaapple/items/faf125e28f8c2860269c
swrμ μ΄μ©ν΄μ μμ± νμ΄μ§ μλ² μ¬μ΄νΈ λ λλ§ λ° ν΄λΌμ΄μΈνΈ μ¬μ΄λ λ λλ§μ μ μ©νλ€. μ²μμ swrμμ react-query μ²λΌ enabled μ΅μ μ΄ μμ΄μ μ΄λ»κ² ν΄μΌν μ§ κ³ λ―Όμ΄ λμλλ°
const { data } = useSWR(
slug ? `http://localhost:3000/api/posts/${slug}` : null,
fetcher,
{
initialData: post,
}
);
ν΄λΉ μ½λμ nullμ λ겨μ€μ 무ν¨ν μ μ©μ νλ€.