рдХреНрдпрд╛ рдкрдВрдЬреАрдХрд░рдг рдпрд╛ "рдкреБрдЯ" рдкреНрд░рднрд╛рд╡ рдореЗрдВ "рдкреНрд░реЗрд╖рдг" рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдкреНрд░рд╛рдкреНрдд "рд╕рд╣рд╛рдпрдХ" рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рдмрдВрдж рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?
рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдЙрдиреНрд╣реЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рдмрдирд╛рдПрдВред
рдореИрдВ рдЕрдкрдиреЗ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдФрд░ рдПрдХреНрд╢рди рдЯрд╛рдЗрдк рдХреЛ рд╕рдорд░реНрдкрд┐рдд рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд░рдЦрддрд╛ рд╣реВрдВ, рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд░реЗрдбрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ )
рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореИрдВ рд╣рдореЗрд╢рд╛ рдЕрдкрдиреЗ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ dva рдЗрдлреЗрдХреНрдЯреНрд╕, рд░рдЬрд┐рд╕реНрдЯреНрд░реЗрд╢рди рдФрд░ рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдореЗрдВ рдХрд░рддрд╛ рд╣реВрдВред
рдЙрджрд╛рд╣рд░рдг:
рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдХрд╛рд░.рдЬреЗрдПрд╕:
export const TOKEN_RESTORED = 'auth/TOKEN_RESTORED';
рдХреНрд░рд┐рдпрд╛рдПрдБ.рдЬреЗрдПрд╕:
export default {
tokenRestored: payload => ({type: TOKEN_RESTORED, payload: payload.token})
};
рдореЙрдбрд▓.рдЬреЗрдПрд╕:
app.model({
namespace: ...,
state: { ... },
effects: { ... },
subscriptions: {
setup({dispatch}) {
let token = localStorage.token;
if (token) {
dispatch(actions.tokenRestored({token}));
}
}
}
});
рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рджрд░реНрдЬрдиреЛрдВ рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдмрд┐рдирд╛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
Warning: dispatch: auth/tokenRestored should not be prefixed with namespace auth
рдХреЛрдб рд╢реИрд▓реА рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╡рд░реАрдпрддрд╛ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ, рдФрд░ рдбреАрд╡реАрдП рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рджрдВрдбрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕реАрдзреЗ рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рдореИрдВрдиреЗ рдЕрднреА рдПрдХ рд╣реА рдореБрджреНрджреЗ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд┐рдпрд╛ рд╣реИред
redux-actions рджреНрд╡рд╛рд░рд╛ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рдХрд╛рд░рдг рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореЙрдбрд▓реЛрдВ рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВрдиреЗ рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдмрдирд╛рдпрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред
рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдФрд░ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП https://www.npmjs.com/package/babel-plugin-dev-expression рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛
рд╡рд┐рдХрд╛рд╕ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?
рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдореИрдВ рдмреИрдмрд▓ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдРрдк рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ?
рдореБрдЭреЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ рдХреНрдпреЛрдВ рдорд┐рд▓рдиреА рдЪрд╛рд╣рд┐рдП?
19 рдЬреБрд▓рд╛рдИ, 2017 06:25 рдХреЛ, "рдЪреЗрдиреНрдЪреЗрдВрдЧ (ф║Сш░ж)" рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:
https://www.npmjs.com/package/babel-plugin-dev-expression рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛
рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдФрд░ рдЪреЗрддрд╛рд╡рдиреА рдкрдЯреНрдЯреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рд╕реВрддреНрд░ рдХреЛ рд▓рд┐рдЦрд╛ рд╣реИред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/dvajs/dva/issues/988#issuecomment-316261873 , рдпрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
рд╕реВрддреНрд░
https://github.com/notifications/unsubscribe-auth/ABJVKPRJMf0P0qVcTgOm-UH4q9RCNpg4ks5sPXcTgaJpZM4N9hlv
.
@orzarchi рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ @sorrycc рдмреЗрд╣рдж рд╡реНрдпрд╕реНрдд рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрд▓реЗ рдореБрджреНрджреЛрдВ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИред рддреЛ рдЖрдкрдХреЛ рдЙрд╕рдХрд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред
BTW, рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрди рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд┐рдпрд╛?
рдореБрдЭреЗ рдПрдХ рдЕрд▓рдЧ рд╕рдорд╕реНрдпрд╛ рдереАред рдореЗрд░рд╛ рдореЙрдбрд▓ рдПрдХ рдХреНрд░рд┐рдпрд╛ рдбрд╛рд▓рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдЕрдиреНрдп рдореЙрдбрд▓реЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
// realtime.js
yield put({ type: 'message', payload: { message } });
рдФрд░ рдЕрдиреНрдп рдореЙрдбрд▓ рд░реАрдпрд▓рдЯрд╛рдЗрдо рд╕реЗ рд╕рдВрджреЗрд╢ рд╕реБрдирддреЗ рд╣реИрдВ:
// someModel.js
const message = yield take('realtime/message');
рдЪреВрдВрдХрд┐ realtime
рдореЙрдбрд▓ message
рд╕рд╛рде рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдХреЛрдИ рдкрд░рд┐рднрд╛рд╖рд┐рдд message
рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рд╣реИред рдЙрд╕ рд╡рдЬрд╣ рд╕реЗ yield put({ type: 'message', payload: { message } })
рдХреЛ dvajs рдЖрдВрддрд░рд┐рдХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рджреНрд╡рд╛рд░рд╛ рдЙрдкрд╕рд░реНрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ realtime/message
рдХрднреА рднреА рдирд┐рдХрд╛рд▓ рдирд╣реАрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдФрд░ рдЕрдЧрд░ рдореИрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЙрдкрд╕рд░реНрдЧ рдХрд░рддрд╛ рд╣реВрдВ:
// realtime.js
yield put({ type: 'realtime/message', payload: { message } });
рдпрд╣ рдиреЗрдорд╕реНрдкреЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ рдлреЗрдВрдХрддрд╛ рд╣реИ ('... рдиреЗрдорд╕реНрдкреЗрд╕ рдХреЗ рд╕рд╛рде рдЙрдкрд╕рд░реНрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП ...')
рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдореЙрдбрд▓ рдореЗрдВ рдбрдореА рдкреНрд░рднрд╛рд╡ рдЬреЛрдбрд╝рд╛ рд╣реИ:
// realtime.js
'effects': {
// dvajs requires effect to be defined to auto-prefix it with namespace
// if add prefix manually then dvajs throws annoying warnings
// https://github.com/dvajs/dva/issues/988
message: () => { },
}
рдЕрдм рдореЗрд░реЗ рдкрд╛рд╕ рдХреЛрдИ рдЪреЗрддрд╛рд╡рдиреА рдирд╣реАрдВ рд╣реИ рдФрд░ рдЕрдиреНрдп рдореЙрдбрд▓реЛрдВ рдХреЛ realtime/message
рдХрд╛рд░реНрд░рд╡рд╛рдИ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИред
рдореИрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдХреНрдпреЛрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдиреЗ рд╕реЗ рдЙрдирдХреА рд░рд╛рдп рдмрджрд▓ рдЬрд╛рдПрдЧреАред
рдЖрдк рд╕рдорд╛рдзрд╛рди рдареАрдХ рд▓рдЧрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рдпрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИрдВ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕реИрдХрдбрд╝реЛрдВ рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣реЛрдВред
рдПрдХреНрд╢рди рдкреНрд░рдХрд╛рд░реЛрдВ (рдпрд╛ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕) рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рднреА рдЖрдо рдмрд╛рдд рд╣реИ, рдФрд░ рдЗрд╕ рддрд░рд╣ рдореИрдВ рд╣рдореЗрд╢рд╛ рдЙрдкрд╕рд░реНрдЧ рдХреЗ рд╕рд╛рде рдкреНрд░реЗрд╖рдг рдХрд░рддрд╛ рд╣реВрдВред
рдореБрдЭреЗ рдЕрднреА рддрдХ рдХреЛрдИ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрдкрдиреЗ рд╡рд░реНрддрдорд╛рди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП dva рдлреЛрд░реНрдХ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдлрд┐рд░ рдХрднреА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдореБрдЭреЗ рдпрд╣рд╛рдВ рдкрд╛рд░реНрдЯреА рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝реА рджреЗрд░ рд╣реЛ рдЧрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рд╣реИрдХ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рддреНрд░реБрдЯрд┐ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛ред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдХрдо рд╕реЗ рдХрдо рддреНрд░реБрдЯрд┐ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред
```// my-model.js
рдХрдВрд╕реЛрд▓.рдПрд░рд░ = рд╕рдВрджреЗрд╢ => {
рдЕрдЧрд░ (message.indexOf("prefixNamespace") === -1) {
рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ (рд╕рдВрджреЗрд╢);
}
};
рдореБрдЭреЗ рдпрд╣рд╛рдВ рдкрд╛рд░реНрдЯреА рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝реА рджреЗрд░ рд╣реЛ рдЧрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рд╣реИрдХ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рддреНрд░реБрдЯрд┐ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛ред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдХрдо рд╕реЗ рдХрдо рддреНрд░реБрдЯрд┐ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред
console.error = message => { if (message.indexOf("prefixNamespace") === -1) { console.log(message); } };
рдХреНрдпрд╛ рдЖрдк рдЕрдкрдирд╛ рдХреЛрдб рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЖрдкрдиреЗ рдХреЛрдб рдХрд╣рд╛рдВ рд░рдЦрд╛?
рдЖрдк рдЗрд╕реЗ src/app.tsx рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдЕрдЧрд░ рдЖрдк рд╕рднреА рдХрдВрд╕реЛрд▓.рдПрд░рд░ рдХреЛ рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХрдВрд╕реЛрд▓.рдПрд░рд░ рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕ рдХреЛрдб рдХреЛ рдЖрдЬрдорд╛ рд╕рдХрддреЗ рд╣реИрдВ
const errorLog = console.error;
console.error = (...rest) => {
if (rest[0] && rest[0].indexOf('[sagaEffects.put]') === -1) {
errorLog.call(console, ...rest);
}
};
рдЖрдк рдЗрд╕реЗ src/app.tsx рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдЕрдЧрд░ рдЖрдк рд╕рднреА рдХрдВрд╕реЛрд▓.рдПрд░рд░ рдХреЛ рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХрдВрд╕реЛрд▓.рдПрд░рд░ рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕ рдХреЛрдб рдХреЛ рдЖрдЬрдорд╛ рд╕рдХрддреЗ рд╣реИрдВ
const errorLog = console.error; console.error = (...rest) => { if (rest[0] && rest[0].indexOf('[sagaEffects.put]') === -1) { errorLog.call(console, ...rest); } };
рдзрдиреНрдпрд╡рд╛рдж, рдФрд░ рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдореИрдВ рдРрдк рдореЗрдВ рдХрд╣реАрдВ рднреА рд░рдЦ рд╕рдХрддрд╛ рд╣реВрдВ, :))
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдореБрдЭреЗ рдпрд╣рд╛рдВ рдкрд╛рд░реНрдЯреА рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝реА рджреЗрд░ рд╣реЛ рдЧрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рд╣реИрдХ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рддреНрд░реБрдЯрд┐ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛ред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдХрдо рд╕реЗ рдХрдо рддреНрд░реБрдЯрд┐ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред
```// my-model.js
рдХрдВрд╕реЛрд▓.рдПрд░рд░ = рд╕рдВрджреЗрд╢ => {
рдЕрдЧрд░ (message.indexOf("prefixNamespace") === -1) {
рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ (рд╕рдВрджреЗрд╢);
}
};