<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>우주원숭이의 개발여행</title>
    <link>https://spacemonkey925.tistory.com/</link>
    <description>-</description>
    <language>ko</language>
    <pubDate>Fri, 17 Apr 2026 06:57:58 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>우주원숭이</managingEditor>
    <item>
      <title>저장할 때 prettier format적용</title>
      <link>https://spacemonkey925.tistory.com/115</link>
      <description>&lt;pre id=&quot;code_1660896843710&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;yarn add --dev prettier&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1660897068301&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// .prettierrc
{
  &quot;singleQuote&quot;: true,
  &quot;semi&quot;: false,
  &quot;useTabs&quot;: false,
  &quot;trailingComma&quot;: &quot;all&quot;,
  &quot;bracketSpacing&quot;: true,
  &quot;arrowParens&quot;: &quot;avoid&quot;,
  &quot;endOfLine&quot;: &quot;auto&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1660897086919&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// .prettierignore
.next
node_modules
.vscode
package.json
package-lock.json
dist&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1660896080754&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// .vscode/settings.json
{
  &quot;javascript.format.enable&quot;: false,
  &quot;advancedNewFile.exclude&quot;: {
    &quot;node_modules&quot;: true,
    &quot;dist&quot;: true
  },
  &quot;editor.formatOnSave&quot;: true,
  &quot;editor.formatOnPaste&quot;: true,
  &quot;editor.codeActionsOnSave&quot;: {
    &quot;source.fixAll.eslint&quot;: true
  },
  &quot;editor.tokenColorCustomizations&quot;: {
    &quot;comments&quot;: &quot;#7e6666&quot;
  },
  &quot;eslint.alwaysShowStatus&quot;: true,
  &quot;eslint.format.enable&quot;: true,
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 설정하고 vscode를 재시작해보자.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;위처럼 셋팅했는데도 안된다면 이것도 적용해보자.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vscode에서 Ctrl + Shift + p&lt;br /&gt;그리고 Format Document With 검색후 엔터&lt;br /&gt;Configure Default Formatter 엔터&lt;br /&gt;Prettier - Code formatter 엔터&lt;/p&gt;</description>
      <category>개발도구/Eslint, Prettier</category>
      <category>AutoFix</category>
      <category>eslint</category>
      <category>prettier</category>
      <author>우주원숭이</author>
      <guid isPermaLink="true">https://spacemonkey925.tistory.com/115</guid>
      <comments>https://spacemonkey925.tistory.com/115#entry115comment</comments>
      <pubDate>Fri, 19 Aug 2022 16:45:40 +0900</pubDate>
    </item>
    <item>
      <title>The engine &amp;quot;node&amp;quot; is incompatible with this module. Expected version &amp;quot;^12.22.0 || ^14.17.0 || &amp;gt;=16.0.0&amp;quot;. Got &amp;quot;14.15.4&amp;quot;error Found incompatible module.</title>
      <link>https://spacemonkey925.tistory.com/114</link>
      <description>&lt;pre id=&quot;code_1660887245738&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;yarn create next-app --typescript&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;next를 경험해보기 위해 cna(create next app)로 설치를 하는도중 제목과 같은 에러를 조우하였다.&lt;br /&gt;현재 내 맥os에 설치되어있는 node의 버전이 맞지않아서 어떤 패키지들이 설치되지 않는다는 것이었다.&lt;/p&gt;
&lt;pre id=&quot;code_1660887384502&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;nvm ls&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필자는 다양한 노드 버전을 사용하기 위해 nvm을 사용하고 있으며 현재 기본값은 v14였다.&lt;br /&gt;최신 node버전을 설치하기 위해 검색을 해보았다.&lt;/p&gt;
&lt;pre id=&quot;code_1660887513216&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;nvm ls-remote --lts&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;v16.17.0&amp;nbsp;&amp;nbsp;&amp;nbsp;(Latest LTS: Gallium)&amp;nbsp;&lt;br /&gt;이것이 최신버전으로 나와서 설치하였다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1660887585976&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;nvm install 16.17.0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치후 알아서 기본값으로 들어간다.&lt;br /&gt;다시 cna를 실행하니 에러없이 설치가 완료되었다.&lt;/p&gt;</description>
      <category>개발/Next</category>
      <category>Next</category>
      <category>next설치시 에러</category>
      <category>node</category>
      <author>우주원숭이</author>
      <guid isPermaLink="true">https://spacemonkey925.tistory.com/114</guid>
      <comments>https://spacemonkey925.tistory.com/114#entry114comment</comments>
      <pubDate>Fri, 19 Aug 2022 14:40:55 +0900</pubDate>
    </item>
    <item>
      <title>this.setState</title>
      <link>https://spacemonkey925.tistory.com/113</link>
      <description>&lt;p&gt;this.setState는 async , 비동기로 작동한다.&lt;/p&gt;
&lt;pre id=&quot;code_1562140173946&quot; class=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;test = () =&amp;gt; {
	let num = 5;
	console.log(num);
    
    this.setState({
    	num: num - 1;
    });
    
    console.log(num);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;위와 같을 경우&amp;nbsp;&lt;br /&gt;콘솔에는 5, 4가 찍히지 않을것이다.&amp;nbsp;&lt;br /&gt;setState는 비동기이므로 setState()를 실행하고 완료를 기다리지 않고 바로 console.log()를 수행한다.&lt;/p&gt;
&lt;p&gt;setState는 state를 변화시키고 렌더링을 하는데&lt;br /&gt;콜백함수를 추가해주면 콜백함수 실행 된 후 리렌더링을 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1562140474054&quot; class=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;test = () =&amp;gt; {
	let num = 5;
	console.log(num);
    
    this.setState({
    	num: num - 1;
    }, () =&amp;gt; {
    	console.log('callback fn');
    });
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발/React</category>
      <category>async</category>
      <category>callback</category>
      <category>React</category>
      <category>setState</category>
      <author>우주원숭이</author>
      <guid isPermaLink="true">https://spacemonkey925.tistory.com/113</guid>
      <comments>https://spacemonkey925.tistory.com/113#entry113comment</comments>
      <pubDate>Wed, 3 Jul 2019 16:55:49 +0900</pubDate>
    </item>
    <item>
      <title>타입스크립트 인터페이스 정의</title>
      <link>https://spacemonkey925.tistory.com/112</link>
      <description>&lt;p&gt;Typescript의 interface로 props의 데이터 타입을 정의함.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1561710691101&quot; class=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;interface Props {
    form: {[key: string]: any};
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이렇게 인터페이스가 정의되어있을 경우.&lt;br /&gt;this.props.form 은 객체인데 키는 string이고(당연한 얘기지만..) 키와 매칭되는 값은 any로 어떤 데이터 형식이던 올 수 있다는 의미.&amp;nbsp;&lt;/p&gt;</description>
      <category>개발/Typescript</category>
      <category>Interface</category>
      <category>TypeScript</category>
      <author>우주원숭이</author>
      <guid isPermaLink="true">https://spacemonkey925.tistory.com/112</guid>
      <comments>https://spacemonkey925.tistory.com/112#entry112comment</comments>
      <pubDate>Fri, 28 Jun 2019 17:33:43 +0900</pubDate>
    </item>
    <item>
      <title>Redux</title>
      <link>https://spacemonkey925.tistory.com/111</link>
      <description>&lt;blockquote data-ke-style=&quot;box&quot;&gt;state를 관리해주는 도구로 단일 스토어를 사용한다.&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;react에서는 props를 이용해서 하위 컴포넌트로 데이터를 계속 넘겨줘야한다.&lt;br /&gt;노드의 깊이가 깊어질수록 복잡도가 높아지고 비효율을 발생시킴.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Redux의 데이터 교류&lt;/h4&gt;
&lt;p&gt;단방향 데이터 디자인 패턴인 Flux를 변형시켰음.&lt;br /&gt;시스템이 action을 받았을 경우 dispatcher가 action들을 관리하여 단일 store의 state를 업데이트.&lt;br /&gt;변동된 데이터가 있다면 view 리렌더링.&lt;br /&gt;view에서도 dispatcher로 action을 보낼 수 있음.&lt;/p&gt;
&lt;p&gt;dispatcher와 action을 이용하면 props를 이용해서 컴포넌트를 단계별로 거치지 않아도&lt;br /&gt;데이터 관리가 가능해짐.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;box&quot;&gt;action -&amp;gt; dispatch -&amp;gt; reducer -&amp;gt; store update -&amp;gt; rerendering&lt;/blockquote&gt;</description>
      <category>개발/React</category>
      <category>Flux</category>
      <category>React</category>
      <category>Redux</category>
      <category>STATE</category>
      <category>Store</category>
      <author>우주원숭이</author>
      <guid isPermaLink="true">https://spacemonkey925.tistory.com/111</guid>
      <comments>https://spacemonkey925.tistory.com/111#entry111comment</comments>
      <pubDate>Wed, 26 Jun 2019 17:40:07 +0900</pubDate>
    </item>
    <item>
      <title>Reducer</title>
      <link>https://spacemonkey925.tistory.com/110</link>
      <description>&lt;p&gt;store는 커다란 JSON의 결정체로 상태는 기본적으로 store에서 집중관리한다.&lt;/p&gt;
&lt;pre id=&quot;code_1561429905007&quot; class=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
    session: {
    ...
	},
    timeline: {
    ...
    },
    notification: {
    ...
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이 store 와 store에 존재하는 state는 신성한 존재이다.&lt;br /&gt;감히 react component 따위는 범접할 수 없는..&lt;br /&gt;그렇기에 component가 store(state)와 닿기위해서는 action이라는 신성한 의식을 거쳐야한다.&lt;/p&gt;
&lt;p&gt;그럼 action을 하면 store(state)와 바로 닿을 수 있느냐?! 그건 또 아니다.&lt;br /&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;신성한 store 영역을 지키는 문지기가 있는데 그것이 바로 &lt;/span&gt;&lt;i&gt;&lt;b&gt;reducer&amp;nbsp;&lt;/b&gt;&lt;/i&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;인것.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;그렇다면 component를 store(state)에 닿게하는 신성한 의식인 action은 어떻게 생겼냐면&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1561430750810&quot; class=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
    type: 'change-name',
    payload: 'data'
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;요래 생김.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;reducer는 action의 type을 보고 reducer내의 switch문의 해당영역으로 감.&lt;br /&gt;old state와 action의 payload를 가지고 new state를 return한다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;normal&quot;&gt;데이터의 불변성을 유지하기 위해 새로운 데이터를 리턴.&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;old data + action 을 가지고 reducer는 적절한 new state를 경신한다.&lt;br /&gt;state가 변경되었으므로 해당state가 사용되는 컴포넌트는 리렌더링&lt;/p&gt;</description>
      <category>개발/React</category>
      <category>Action</category>
      <category>React</category>
      <category>Reducer</category>
      <category>STATE</category>
      <author>우주원숭이</author>
      <guid isPermaLink="true">https://spacemonkey925.tistory.com/110</guid>
      <comments>https://spacemonkey925.tistory.com/110#entry110comment</comments>
      <pubDate>Tue, 25 Jun 2019 13:05:17 +0900</pubDate>
    </item>
    <item>
      <title>JSX</title>
      <link>https://spacemonkey925.tistory.com/108</link>
      <description>&lt;pre id=&quot;code_1561364614301&quot; class=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const element = &amp;lt;h1&amp;gt;Hello, world!&amp;lt;/h1&amp;gt;;​&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;font-size: 0.94em;&quot;&gt;Javascript를 확장한 문법.&lt;br /&gt;JSX는 React element를 생성한다.&lt;/p&gt;
&lt;p style=&quot;font-size: 0.94em;&quot;&gt;React는 마크업파일과 로직을 분리하는 대신 둘 다 포함하는 &lt;b&gt;&lt;i&gt;컴포넌트&lt;/i&gt;&lt;/b&gt; 라는 느슨하게 연결된 유닛으로 &lt;b&gt;관심사를 분리&lt;/b&gt;한다.&lt;/p&gt;
&lt;h4&gt;JSX에 표현식 포함하기&lt;/h4&gt;
&lt;pre id=&quot;code_1561194281079&quot; class=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const name = 'Hari';
const element = &amp;lt;h1&amp;gt;Hello, {name}&amp;lt;/h1&amp;gt;;

ReactDOM.render(
  element,
  document.getElementById('root')
);&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;font-size: 0.94em;&quot;&gt;JSX의 중괄호 안에는 유효한 모든 Javascript 표현식을 넣을 수 있다.&lt;br /&gt;즉, {name} 처럼 변수만 넣을 수도 있고 {2 + 2}처럼 수식을 넣을수도 있고 {user.id} 처럼 객체의 프로퍼티값을 넣을 수도 있고 함수를 넣을수도 있다.&lt;/p&gt;
&lt;h4&gt;JSX도 표현식&lt;/h4&gt;
&lt;p style=&quot;font-size: 0.94em;&quot;&gt;컴파일이 끝나면 JSX 표현식의 js 함수가 호출되고 js객체로 인식된다.&lt;br /&gt;if, for 등의 함수안에서 사용하고 변수할당, 인자 등으로 활용가능.&lt;/p&gt;
&lt;pre id=&quot;code_1561194985580&quot; class=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function getGreeting(user) {
  if (user) {
    return &amp;lt;h1&amp;gt;Hello, {formatName(user)}!&amp;lt;/h1&amp;gt;;
  }
  return &amp;lt;h1&amp;gt;Hello, Stranger.&amp;lt;/h1&amp;gt;;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;font-size: 0.94em;&quot;&gt;컴파일 후 formatName이 호출&lt;/p&gt;
&lt;h4&gt;JSX 속성정의&lt;/h4&gt;
&lt;pre id=&quot;code_1561195142046&quot; class=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const element = &amp;lt;div tabIndex=&quot;0&quot;&amp;gt;&amp;lt;/div&amp;gt;;
const element = &amp;lt;img src={user.avatarUrl}&amp;gt;&amp;lt;/img&amp;gt;;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;font-size: 0.94em;&quot;&gt;속성에 따옴표를 이용해 문자열 리터럴을 정의하거나&lt;br /&gt;중괄호를 사용하여 속성에 js표현식을 넣을수도 있다.&lt;br /&gt;그러나 위 2가지를 동시에 사용하면 안된다. 따옴표안에 표현식을 넣는것처럼..&lt;br /&gt;&quot;{user.avatarUrl}&quot; 이런식으로.. 이거 은근히 자주하게 되는 실수.&lt;/p&gt;
&lt;blockquote style=&quot;font-size: 0.94em;&quot; data-ke-style=&quot;box&quot;&gt;JSX는 HTML보다 Javascript에 가깝다.&lt;br /&gt;따라서 HTML속성이름은 camelCase 로 적어야한다.&lt;br /&gt;예를들어 class='btn'&amp;nbsp; 은 className='btn'&lt;br /&gt;tabindex는 tabIndex 로&lt;/blockquote&gt;
&lt;h4&gt;&lt;br /&gt;JSX로 자식 정의&lt;/h4&gt;
&lt;p style=&quot;font-size: 0.94em;&quot;&gt;태그는 항시 닫아주어야한다.&lt;br /&gt;JSX 태그는 자식을 포함할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1561195563434&quot; class=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const element = (
  &amp;lt;div&amp;gt;
    &amp;lt;h1&amp;gt;Hello!&amp;lt;/h1&amp;gt;
    &amp;lt;h2&amp;gt;Good to see you here.&amp;lt;/h2&amp;gt;
  &amp;lt;/div&amp;gt;
);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발/React</category>
      <category>JSX</category>
      <category>React</category>
      <author>우주원숭이</author>
      <guid isPermaLink="true">https://spacemonkey925.tistory.com/108</guid>
      <comments>https://spacemonkey925.tistory.com/108#entry108comment</comments>
      <pubDate>Sat, 22 Jun 2019 18:29:29 +0900</pubDate>
    </item>
    <item>
      <title>Actions</title>
      <link>https://spacemonkey925.tistory.com/107</link>
      <description>&lt;p&gt;dispatcher는 action을 호출해 데이터를 불러오고 store로 전달할 수 있도록 메소드를 제공.&lt;br /&gt;&lt;br /&gt;src &amp;gt; actions &amp;gt; TodoActions.js &amp;gt; updateText(todoId, newText)&lt;br /&gt;이 메소드는 view의 이벤트 핸들러에서 호출해야 실행할 수 있고 그 결과로 사용자 요청에 응답할 수 있다.&lt;br /&gt;이 action creator 메소드는 type을 추가할 수 있다.&lt;br /&gt;type을 이용해 action이 store에서 해석될 수 있고 적절한 응답이 가능하도록 한다.&lt;/p&gt;</description>
      <category>개발/React</category>
      <category>actions</category>
      <category>React</category>
      <author>우주원숭이</author>
      <guid isPermaLink="true">https://spacemonkey925.tistory.com/107</guid>
      <comments>https://spacemonkey925.tistory.com/107#entry107comment</comments>
      <pubDate>Fri, 21 Jun 2019 17:21:29 +0900</pubDate>
    </item>
    <item>
      <title>Views와 Controller-Views</title>
      <link>https://spacemonkey925.tistory.com/106</link>
      <description>&lt;p style=&quot;font-size: 0.94em;&quot;&gt;React는 조화롭고 자유로운 형태로 다시 렌더링 할 수 있는 view를 view레이어로 제공한다.&lt;/p&gt;
&lt;h4&gt;controller-view&lt;/h4&gt;
&lt;p style=&quot;font-size: 0.94em;&quot;&gt;store에 의해 이벤트를 중계할 수 있는 특별한 종류의 view&lt;br /&gt;store에서 데이터를 얻을 수 있는 glue code를 제공함.&lt;br /&gt;데이터를 위계대로 자식들에게 전달하도록 돕는다.&lt;br /&gt;페이지의 광범위한 영역을 관리하는 controller-view&lt;/p&gt;
&lt;p style=&quot;font-size: 0.94em;&quot;&gt;store에게 이벤트를 받으면 store의 퍼블릭 getter 메소드를 통해 새로 필요한 데이터를 처음으로 요청.&lt;br /&gt;그 과정에서 setState() or forceUpdate() 호출.&lt;br /&gt;그 호출 과정에서 자체의 render() 메소드와 하위 모든 자식의 render() 메소드를 실행.&lt;/p&gt;
&lt;p style=&quot;font-size: 0.94em;&quot;&gt;store의 전체상태를 단일 객체로 만들어 하위 view에 전달 - 관리해야 할 프로퍼티 수를 줄이는 효과&lt;br /&gt;controller-view는 view의 최상위에서 controller의 역할을 하며 하위의 view들이 순수함을 유지하도록 함.&lt;br /&gt;store와 view 사이의 glue-view 느낌?!&lt;/p&gt;</description>
      <category>개발/React</category>
      <category>controller-views</category>
      <category>React</category>
      <category>views</category>
      <author>우주원숭이</author>
      <guid isPermaLink="true">https://spacemonkey925.tistory.com/106</guid>
      <comments>https://spacemonkey925.tistory.com/106#entry106comment</comments>
      <pubDate>Fri, 21 Jun 2019 17:09:20 +0900</pubDate>
    </item>
    <item>
      <title>Stores</title>
      <link>https://spacemonkey925.tistory.com/105</link>
      <description>&lt;p style=&quot;font-size: 0.94em;&quot;&gt;&lt;b&gt;store는 어플리케이션의 상태와 로직을 포함하고 있다.&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 0.94em;&quot;&gt;전통적인 MVC의 모델과 비슷한 역할이지만 많은 객체의 상태를 관리할 수 있음.&lt;br /&gt;단순히 객체 컬렉션을 관리하는 것을 넘어 어플리케이션 내의 개별적인 도메인에서 어플리케이션의 상태를 관리한다.&lt;br /&gt;(개별적 도메인이라는 건 각 페이지의 url을 말하는 건가??...)&lt;/p&gt;
&lt;p style=&quot;font-size: 0.94em;&quot;&gt;ImageStore는 이미지 콜렉션을 지속적으로 추적&lt;br /&gt;TodoStore는 할 일 항목의 콜렉션을 관리.&lt;/p&gt;
&lt;p style=&quot;font-size: 0.94em;&quot;&gt;store는 자신을 dispatcher에 등록하고 callback을 제공.&lt;br /&gt;이 callback은 action을 파라미터로 받는다.&lt;br /&gt;store에 등록된 callback 내부에서는 switch문을 사용한 action 타입을 활용해서 action을 해석하고 store내부 메소드에 적절하게 연결될 수 있는 훅을 제공한다. 결과적으로 action은 dispatcher를 통해 store의 상태를 갱신한다.&lt;br /&gt;store가 업데이트 된 후, 상태가 변경되었다는 이벤트를 중계하는 과정으로 view에게 새로운 상태를 보내주고 view 스스로 업데이트하게 만든다.&lt;/p&gt;</description>
      <category>개발/React</category>
      <category>Action</category>
      <category>Dispatcher</category>
      <category>React</category>
      <category>Store</category>
      <author>우주원숭이</author>
      <guid isPermaLink="true">https://spacemonkey925.tistory.com/105</guid>
      <comments>https://spacemonkey925.tistory.com/105#entry105comment</comments>
      <pubDate>Fri, 21 Jun 2019 16:21:26 +0900</pubDate>
    </item>
  </channel>
</rss>