๊ณต์ ๋ฌธ์ ์ ํด์ปค๋ด์ค ์์ ์์๋ ๋ชจ๋ธ์ ๊ตฌ๋ ์์ ์ผ์นํ๋ ํ์คํ ๋ฆฌ url์ ์ฒญ์ทจํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ๋ค์๊ณผ ๊ฐ์ด ํ์ด์ง์ ์ด๊ธฐ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํฉ๋๋ค.
//ๆ่ชapiๆๆกฃ
app.model({
namespace: 'todo',
// ...
subscriptions: {
setup({ history, dispatch }) {
// Subscribe history(url) change, trigger `load` action if pathname is `/`
return history.listen(({ pathname }) => {
if (pathname === '/') {
dispatch({ type: 'load' });
}
});
},
},
});
ํฌํธ: dva-hackernews์ ์ ์ฌํ๊ฒ ์์ฑ๋
์ด ํ์ด์ง ๊ตฌ์ฑ ์์์ ์๋ช ์ฃผ๊ธฐ ๋์ ๋ฐ์ดํฐ๋ฅผ๋ก๋ ๋ค๋ฅด๋ค. ์๋ฅผ ๋ค์ด, hackernews ๊ฐ์ ์์์, ์ฐ๋ฆฌ์ componentWillMount ๋๋ componentDidMount์์ ํด๋น ํจ๊ณผ ์์ ์ ํ๊ฒฌํ๋๋ก ์ ํํ ์ ์์ต๋๋ค ListPage๋ฅผ ์ผ๋ก๋ถํฐ ์๊ฐ๋ ์์ฒญ์ํ๊ณ , ์๋ฒ ๋ ๋์ ๊ด์ . , ์ด๋ฌํ ์ข ๋ฅ์ ํ์ด์ง์ ์ด๊ธฐ ๋ฐ์ดํฐ ์ข ์์ฑ์ ์ ์ธํ ์ฑ ์์ด ์๋ ์ถ๊ฐ ์๋ช ์ฃผ๊ธฐ(์: next.js์ getInitProps)๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค.
ํ์ด์ง์ ์ด๊ธฐ ๋ฐ์ดํฐ ์ข ์์ฑ์ ๋ชจ๋ธ์ ์๋ธ์คํฌ๋ฆฝํธ์ ๋ฃ๋ ํ์ฌ ๋ฐฉ๋ฒ์ ๋ํด ๋ค์๊ณผ ๊ฐ์ ์ง๋ฌธ์ด ์์ต๋๋ค.
๋ฌผ๋ก dva๋ ์ด๋ค ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋์ง์ ์ ํ ์ ๋์ง ์๊ณ dva์์ ํ์ด์ง ์ปดํฌ๋ํธ์ ์๋ช
์ฃผ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์์ ํ ๊ฐ๋ฅํ์ง๋ง ์ค์ฆ์ ์ธ ํจ๊ณผ๊ฐ ์๋ ๊ณต์ ๋ฌธ์์ ์์ ์์๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ณ ๋ ค ์ฌํญ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์ ์ WeChat ๊ทธ๋ฃน ์ง๋ฌธ์ ์ถ๊ฐํ์ง๋ง ๋ต๋ณ์ ์ป์ ์ ์์์ต๋๋ค. ๋ณ๋ก ์ค๋๋ ฅ์ด ์๋ ๊ฒ ๊ฐ์์) ๋ฌธ์ ๋ฅผ ๋๋๋ฐ ๊ท์ฐฎ๊ฒ ํด์ ๋ฏธ์ํด.
@sorrycc
๋ชจ๋ธ์ inithook
้ฎ็ฎฑ๏ผ[email protected]
์๋ช
์ NetEase Mail Master์ ์ํด ์ฌ์ฉ์ ์ ์๋์์ต๋๋ค.2017๋
12์ 17์ผ 16:30์ Qin Junwen์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ํ์ด์ง์ ๋ํด.
//API ๋ฌธ์์์
app.model({
๋ค์์คํ์ด์ค: '๋๋',
// ...
๊ตฌ๋
: {
์ค์ ({ ๊ธฐ๋ก, ๋ฐ์ก }) {
// ๊ตฌ๋
ํ์คํ ๋ฆฌ(url) ๋ณ๊ฒฝ, ๊ฒฝ๋ก๋ช
์ด /
๊ฒฝ์ฐ load
์ก์
ํธ๋ฆฌ๊ฑฐ
๋ฐํ history.listen(({ ๊ฒฝ๋ก ์ด๋ฆ }) => {
if (๊ฒฝ๋ก ์ด๋ฆ ==='/') {
๋์คํจ์น({ ์ ํ:'๋ก๋' });
}
});
},
},
});
ํฌํธ: dva-hackernews์ ์ ์ฌํ๊ฒ ์์ฑ๋ ํญ๋ชฉ ๋ชจ๋ธ
์ด๊ฒ์ ํ์ด์ง ๊ตฌ์ฑ ์์์ ์๋ช
์ฃผ๊ธฐ์์ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ ๋ ์ผ๋ฐ์ ์ผ๋ก ๋ณด๋ ๊ฒ๊ณผ ๋ค๋ฆ
๋๋ค.์๋ฅผ ๋ค์ด,hackernews์ ๋์ผํ ์์์ ListPage์ componentWillMount ๋๋ componentDidMount์์ ํด๋น ํจ๊ณผ ์์
์ ์ ๋ฌํ๋๋ก ์ ํํ์ฌ ์์ฒญํ ์ ์์ต๋๋ค. , ๊ทธ๋ฆฌ๊ณ ์ฌ์ง์ด ์๋ฒ ๋ ๋์ ๊ด์ ์์ ์๊ฐํด๋ณผ ์๋ ์์ต๋๋ค. , ์ด ํ์ด์ง์ ์ด๊ธฐ ๋ฐ์ดํฐ ์ข
์์ฑ์ ์ ์ธํ ์ฑ
์์ด ์๋ ์ถ๊ฐ ์๋ช
์ฃผ๊ธฐ(์: next.js์ getInitProps)๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค.
ํ์ด์ง์ ์ด๊ธฐ ๋ฐ์ดํฐ ์ข
์์ฑ์ ๋ชจ๋ธ์ ์๋ธ์คํฌ๋ฆฝํธ์ ๋ฃ๋ ํ์ฌ ๋ฐฉ๋ฒ์ ๋ํด ๋ค์๊ณผ ๊ฐ์ ์ง๋ฌธ์ด ์์ต๋๋ค.
URL ์ผ์น ๋
ผ๋ฆฌ์ ๋ฐ๋ณต: URL ๋งค๊ฐ๋ณ์๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ์ฌ ๋น์ฆ๋์ค ๋
ผ๋ฆฌ์ ์ ๋ฌํ๋ ๊ฒ์ ๋ผ์ฐํฐ์ ์ฑ
์์
๋๋ค.hackernews์ ์์์ ์ฐ๋ฆฌ๋ ๊ทธ๋ค ์ค ์ผ๋ถ๊ฐ ๋ฐ๋ณต๋๊ณ ์ฌ์ง์ด ์๋์ ์ผ๋ก "๋ฎ์ ์์ค"์ธ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. pathToRegex์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(react-router/express ๋ค์ ์์) URL ์ผ์น ๋ฐ ๊ตฌ๋ฌธ ๋ถ์์๋ ์ฌ์ฉ๋จ)
์
๋ฌด ๋ถ๋ฆฌ: ์๋ก ๋ค๋ฅธ ๊ดํ์ ์๋ก ๋ค๋ฅธ ์๋ฏธ๋ก ์ ํด๋นํฉ๋๋ค. ํ์ด์ง๋ ํ์ด์ง๊ฐ ์์กดํ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ธํฉ๋๊น, ์๋๋ฉด ๋ชจ๋ธ์ด ๋ฐ์ดํฐ ๋ก๋๋ฅผ ์ํํ URL์ ์ ์ธํฉ๋๊น?
ํ์ด์ง๊ฐ ์์ฒญ์ ๋ํ ์ ์ด๊ถ์ ์์ ์์ฒญ์ด ์ฑ๊ณตํ๊ฑฐ๋ ์คํจํ ํ ํ์ด์ง์์ ํน์ ๋ก์ง์ ์คํํ๊ณ ์ ํ๋ ๊ฒฝ์ฐ ํ์ด์ง ์์ฒด๊ฐ ์๋ฒ ๋ ๋๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ์ดํฐ ๋ก๋ ๋์์ ๋ํ ์ธ์์ด ์๊ธฐ ๋๋ฌธ์ ๊ตฌํ์ด ๋ ์ด๋ ต์ต๋๋ค. /isomorphic ์๋๋ฆฌ์ค ์ค์ ๋ก๋ 3์ ์ฐ์์
๋๋ค. ์๋ฒ ๋ ๋์์ "๋จผ์ ํ์ด์ง๊ฐ ์์กดํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ ๋ค์ ํ์ด์ง ๋ ๋๋ง์ ์ํ"ํด์ผ ํ๋ฉฐ ์์ฒญ ๋ฌธ์ด ํ์ด์ง ์์ค์์๋ ์ด ์์
์ ์ํํ๋ ๊ฒ์ด ๋ ๋ฒ๊ฑฐ๋ก์ธ ๊ฒ์
๋๋ค.
๊ตฌ๋
๋์์ธ์ elm์ ์ํฅ์ ๋ฐ๋ ๊ฒ ๊ฐ์ง๋ง elm์ ๊ตฌ๋
์ ์ค์ ๋ก ๋ง์ด ์ฌ์ฉ๋์ง ์์ต๋๋ค. websocket๊ณผ ๊ฐ์ ์๋๋ฆฌ์ค๋ฅผ ๋ค๋ฃฐ ๋๋ง ์ฌ์ฉ๋ฉ๋๋ค. ์ด๊ธฐ ์์ฒญ์ ์ฌ์ ํ โโpage ๋ฌธ init๋ฅผ ํตํด ์ด๋ฃจ์ด์ง๋๋ค.
๋ฌผ๋ก dva๋ ์ด๋ค ๋ฐฉ์์ ์ฌ์ฉํ๋์ง์ ์ ํ์ด ์์ต๋๋ค. ๊ณ ๋ ค ์ฌํญ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์ ์ WeChat ๊ทธ๋ฃน ์ง๋ฌธ์ ์ถ๊ฐํ์ง๋ง ๋ต๋ณ์ ์ป์ ์ ์์์ต๋๋ค. ๋ณ๋ก ์ค๋๋ ฅ์ด ์๋ ๊ฒ ๊ฐ์์) ๋ฌธ์ ๋ฅผ ๋๋๋ฐ ๊ท์ฐฎ๊ฒ ํด์ ๋ฏธ์ํด.
@sorrycc
โ์ด ์ค๋ ๋๋ฅผ ๊ตฌ๋ ํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ด ์ด๋ฉ์ผ์ด ์ ์ก๋์์ต๋๋ค. ์ด ์ด๋ฉ์ผ์ ์ง์ ํ์ ํ๊ฑฐ๋ GitHub์์ ๋ณด๊ฑฐ๋ ์ค๋ ๋๋ฅผ ์์๊ฑฐํ์ธ์.
{"api_version":"1.0","๊ฒ์์":{"api_key":"05dde50f1d1a384dd78767c55493e4bb","name":"GitHub"},"entity":{"external_key":"github/dvajs/dva","title ":"dvajs/dva","์๋ง":"GitHub ์ ์ฅ์","main_image_url":" https://cloud.githubusercontent.com/assets/143418/17495839/a5054eac-5d88-11e6-95fc-7290892c7bb5.p ,"avatar_image_url":" https://cloud.githubusercontent.com/assets/143418/15842166/7c72db34-2c0b-11e6-9aed-b52498112777.png ","action":{"name":"GitHub์์ ์ด๊ธฐ", "url":" https://github.com/dvajs/dva "}},"updates":{"snippets":[{"icon":"DESCRIPTION","message":"[ํ ๋ก ]-ํ์ด์ง ์ ๋ณด ๋ฐ์ดํฐ ์ข ์์ฑ ๋ฌธ์ (#1402)"}],"action":{"name":"View Issue","url":" https://github.com/dvajs/dva/issues/1402 "}}}
@yangbin1994
๋ชจ๋ธ์ inithook์ ๋ฌด์์
๋๊น?
๋๋ ๊ทธ๊ฒ์ ๋ชจ๋ธ ๋ฌธ์ ์์ ๋ณด์ง ๋ชปํ๋ค.
์ด Hook์ด ์๋ค๊ณ ๊ฐ์ ํ๋ฉด, ๊ตฌ๋ ์์ ํ๋ ๊ฒ๊ณผ ๋ณธ์ง์ ์ผ๋ก ๋ค๋ฅด์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค.์์ 1-4๊ฐ์ ์ง๋ฌธ์ด ์ฌ์ ํ ์กด์ฌํฉ๋๋ค.
์ด ๋ฌธ์ ๋ ์ต๊ทผ ํ๋์ด ์์๊ธฐ ๋๋ฌธ์ ์๋์ผ๋ก ์ค๋๋ ๊ฒ์ผ๋ก ํ์๋์์ต๋๋ค. ๋ ์ด์ ํ๋์ด ์์ผ๋ฉด ํ์๋ฉ๋๋ค. ๊ทํ์ ๊ธฐ์ฌ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.