<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>React &#8211; Like@Lunatic</title>
	<atom:link href="/tag/react/feed" rel="self" type="application/rss+xml" />
	<link>/</link>
	<description>Naoki Sekiguchi&#039;s personal Web site.</description>
	<lastBuildDate>Wed, 01 Jan 2025 10:13:51 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.4.5</generator>

<image>
	<url>/wp-content/uploads/2021/01/cropped-og-32x32.png</url>
	<title>React &#8211; Like@Lunatic</title>
	<link>/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>[React.js] setStateしても直ちにstateは変更されない</title>
		<link>/2015/07/reactjs-setstate</link>
		
		<dc:creator><![CDATA[Naoki Sekiguchi]]></dc:creator>
		<pubDate>Wed, 08 Jul 2015 13:48:53 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[React]]></category>
		<guid isPermaLink="false">/?p=1175</guid>

					<description><![CDATA[最近仕事でReactをやっている。 今回のネタはひとこと（ひとコード？）で言うと以下のようなこと。 getInitialState () { return { clicked: false }; }, clickHandler () { this.setState({ clicked: true }); console.log(this.state.clicked); // -&#62; false }, render () { console.log(this.state.clicked); // -&#62; true return &#60;button onClick={this.clickHandler}&#62;Click Me&#60;/button&#62;; } インタラクションのハンドラで this.setState したとして、そのハンドラ内でthis.state を参照しても、まだ更新後の値は取れない。render() が呼ばれるタイミングでは更新後の値になっている。実際にステートが更新されるタイミングは意図的に制御されているらしい。トリッキーだ。 更新後の値は変数に入れておいて this.setState しつつ、ハンドラ内ではその変数の値を使うのがおそらく正解だろう。 getInitialState () { return { clicked: false }; }, clickHandler () { var value = true; this.setState({ clicked: value }); console.log(value); // -&#62; true }, render () { console.log(this.state.clicked); // -&#62; true return &#60;button onClick={this.clickHandler}&#62;Click Me&#60;/button&#62;; }]]></description>
										<content:encoded><![CDATA[<p>最近仕事で<a href="https://facebook.github.io/react/">React</a>をやっている。<br />
今回のネタはひとこと（ひとコード？）で言うと以下のようなこと。</p>

<pre><code>getInitialState () {
  return { clicked: false };
},
clickHandler () {
  this.setState({ clicked: true });
  console.log(this.state.clicked); // -&gt; false
},
render () {
  console.log(this.state.clicked); // -&gt; true
  return &lt;button onClick={this.clickHandler}&gt;Click Me&lt;/button&gt;;
}
</code></pre>

<p>インタラクションのハンドラで <code>this.setState</code> したとして、そのハンドラ内で<code>this.state</code> を参照しても、まだ更新後の値は取れない。<code>render()</code> が呼ばれるタイミングでは更新後の値になっている。実際にステートが更新されるタイミングは意図的に制御されているらしい。トリッキーだ。</p>

<p>更新後の値は変数に入れておいて <code>this.setState</code> しつつ、ハンドラ内ではその変数の値を使うのがおそらく正解だろう。</p>

<pre><code>getInitialState () {
  return { clicked: false };
},
clickHandler () {
  var value = true;
  this.setState({ clicked: value });
  console.log(value); // -&gt; true
},
render () {
  console.log(this.state.clicked); // -&gt; true
  return &lt;button onClick={this.clickHandler}&gt;Click Me&lt;/button&gt;;
}
</code></pre>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
