Advanced
μλ²μμ React μν μ¬μ©νκΈ°
ν¨μμμ React μν μ¬μ©νκΈ°
μμ²μ΄ λ€μ΄μ¨ κ²½μ° μ€νλλ ν¨μ λ΄μμ, μλ²κ° μ€νλκ³ μλ React λ΄λΆμ μν κ°μ μ¬μ©νκ³ μΆμ κ²½μ°κ° μμ΅λλ€. κ·Έλ° κ²½μ°
useWrpServer
μ λλ²μ§Έ μΈμ κ°μ μ¬μ©νκ³ , ν¨μ λ΄μμ res
μ ν¨κ» getState
λ₯Ό μΈμλ‘λΆν° λ°μμ€μΈμ.
const Server = () => {
const [state, setState] = useState();
useWrpServer(channel, { state }, [
[
methodDescriptors.getTextValue,
({ res, getState }) => {
const { state } = getState();
res.header({});
res.send({ text: "hello" });
res.end({});
},
],
]);
};
getState
λ μ€νλλ μμ μ κ°μ λ°μμ λ°νν΄μ€λλ€. ν¨μ λ΄λΆμμ getState
μ νΈμΆ μκΈ°λ₯Ό μ‘°μ νλ©΄ μ§μμ μΌλ‘ λ³νλ κ°μ
μνλ μμ μμ κ°μ Έμ¬ μ μμ΅λλ€.
React μνκ° λ³ν λλ§λ€ μλ΅ λ³΄λ΄κΈ°
Streaming rpcμ κ²½μ° React μν κ°μ΄ λ³ν λλ§λ€ μλ΅μ 보λ΄κ³ μΆμ κ²½μ°κ° μμ΅λλ€. μ΄λ° κ²½μ° ν¨μ λ΄μμ
stateChanges
λ₯Ό μ¬μ©νμΈμ.
const Server = () => {
const [state, setState] = useState();
useWrpServer(channel, { state }, [
[
methodDescriptors.getSliderValue,
({ req, res, stateChanges }) => {
res.header({});
const value = getState().state;
const off = stateChanges.on("state", (value) => res.send({ value }));
req.metadata?.on("cancel-response", teardown);
req.metadata?.on("close", teardown);
function teardown() {
off();
res.end({});
}
},
],
]);
};
μμ μμ λ μ¬λ¬ μλ΅μ λ³΄λΌ μ μλ Server streaming rpcλ₯Ό ꡬνν κ²μ
λλ€. state
κ° λ³ν λλ§λ€ κ°μ 보λ΄λ©°,
close
(μ°κ²°μ΄ λμ΄μ§ κ²½μ°), cancel-response
(ν΄λΌμ΄μΈνΈμμ μλ΅μ κ·Έλ§ λ³΄λ΄λΌλ κ²½μ°) μ΄λ²€νΈκ° μ€λ©΄ μνμ λν
ꡬλ
μ μ€μ§νκ³ μλ΅μ λ§λ¬΄λ¦¬ν©λλ€.