μν νλ(State field)λ μ¬μ©μ μ μ μλν° μνλ₯Ό κ΄λ¦¬ν μ μλ μλν° νμ₯ κΈ°λ₯μ λλ€. μ΄ νμ΄μ§λ κ³μ°κΈ° νμ₯ κΈ°λ₯μ ꡬννλ©΄μ μν νλλ₯Ό ꡬμΆνλ κ³Όμ μ μλ΄ν©λλ€.
κ³μ°κΈ°λ νμ¬ μνμ μ«μλ₯Ό λνκ±°λ λΉΌκ³ , λ€μ μμνλ €λ©΄ μνλ₯Ό μ΄κΈ°νν μ μμ΄μΌ ν©λλ€.
μ΄ νμ΄μ§λ₯Ό λ§μΉλ©΄ μν νλλ₯Ό ꡬμΆνλ κΈ°λ³Έ κ°λ μ μ΄ν΄νκ² λ κ²μ λλ€.
Note
μ΄ νμ΄μ§λ Obsidian νλ¬κ·ΈμΈ κ°λ°μλ₯Ό μν΄ κ³΅μ CodeMirror 6 λ¬Έμλ₯Ό μμ½ν κ²μ λλ€. μν νλμ λν λ μμΈν μ 보λ State Fieldsλ₯Ό μ°Έμ‘°νμΈμ.
νμ 쑰건
- State management κΈ°λ³Έ μ΄ν΄
μν ν¨κ³Ό μ μ
μν ν¨κ³Ό(State effect)λ μννλ €λ μν λ³κ²½μ μ€λͺ ν©λλ€. ν΄λμ€μ λ©μλλΌκ³ μκ°ν μ μμ΅λλ€.
κ³μ°κΈ° μμ μμλ κ° κ³μ°κΈ° μ°μ°μ λν μν ν¨κ³Όλ₯Ό μ μν©λλ€:
const addEffect = StateEffect.define<number>();
const subtractEffect = StateEffect.define<number>();
const resetEffect = StateEffect.define();
κΊΎμ κ΄νΈ <>
μ¬μ΄μ νμ
μ ν¨κ³Όμ λν μ
λ ₯ νμ
μ μ μν©λλ€. μλ₯Ό λ€μ΄ λνκ±°λ λΉΌλ €λ μ«μμ
λλ€. 리μ
ν¨κ³Όλ μ
λ ₯μ΄ νμ μμΌλ―λ‘ μλ΅ν μ μμ΅λλ€.
μν νλ μ μ
μκ°κ³Ό λ¬λ¦¬ μν νλλ μ€μ λ‘ μνλ₯Ό _μ μ₯_νμ§ μμ΅λλ€. μνλ₯Ό _κ΄λ¦¬_ν©λλ€. μν νλλ νμ¬ μνλ₯Ό κ°μ Έμ μν ν¨κ³Όλ₯Ό μ μ©νκ³ μ μνλ₯Ό λ°νν©λλ€.
μν νλλ νΈλμμ μ ν¨κ³Όμ λ°λΌ μνμ μ°μ°μ μ μ©νλ κ³μ°κΈ° λ‘μ§μ ν¬ν¨ν©λλ€. νΈλμμ μλ λ κ°μ μΆκ°μ κ°μ μ¬λ¬ ν¨κ³Όκ° ν¬ν¨λ μ μμΌλ―λ‘ μν νλλ μ΄λ₯Ό λͺ¨λ νλμ© μ μ©ν΄μΌ ν©λλ€.
export const calculatorField = StateField.define<number>({
create(state: EditorState): number {
return 0;
},
update(oldState: number, transaction: Transaction): number {
let newState = oldState;
for (let effect of transaction.effects) {
if (effect.is(addEffect)) {
newState += effect.value;
} else if (effect.is(subtractEffect)) {
newState -= effect.value;
} else if (effect.is(resetEffect)) {
newState = 0;
}
}
return newState;
},
});
create
λ κ³μ°κΈ°κ° μμνλ κ°μ λ°νν©λλ€.update
λ ν¨κ³Όλ₯Ό μ μ©νλ λ‘μ§μ ν¬ν¨ν©λλ€.effect.is()
λ ν¨κ³Όλ₯Ό μ μ©νκΈ° μ μ νμ μ νμΈν μ μκ² ν©λλ€.
μν ν¨κ³Ό μ λ¬
μν νλμ μν ν¨κ³Όλ₯Ό μ μ©νλ €λ©΄ νΈλμμ μ μΌλΆλ‘ μλν° λ·°μ μ λ¬ν΄μΌ ν©λλ€.
view.dispatch({
effects: [addEffect.of(num)],
});
λ μΉμν APIλ₯Ό μ 곡νλ λμ°λ―Έ ν¨μ μΈνΈλ₯Ό μ μν μλ μμ΅λλ€:
export function add(view: EditorView, num: number) {
view.dispatch({
effects: [addEffect.of(num)],
});
}
export function subtract(view: EditorView, num: number) {
view.dispatch({
effects: [subtractEffect.of(num)],
});
}
export function reset(view: EditorView) {
view.dispatch({
effects: [resetEffect.of(null)],
});
}
λ€μ λ¨κ³
μν νλμμ Decorationsλ₯Ό μ 곡νμ¬ λ¬Έμ νμ λ°©μμ λ³κ²½νμΈμ.