Skip to content

Instantly share code, notes, and snippets.

Created July 17, 2015 15:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/1944f34703bcb63131d8 to your computer and use it in GitHub Desktop.
Save anonymous/1944f34703bcb63131d8 to your computer and use it in GitHub Desktop.
岡部の自称FRPライブラリ「worldcomponent」がFacebook Reactを正しく使っておらずエラーを起こすことの確認方法
岡部の自称FRPライブラリ「worldcomponent」がFacebook Reactを正しく使っておらずエラーを起こすことの確認方法
1. Chromeで http://kenokabe-techwriting.blogspot.jp/2015/05/react-html-frp.html に行きましょう
2. 下のほうのクリックカウンタまでスクロールしましょう
3. Ctrl+Shift+Iを押してから「Console」タブをクリックしましょう
4. React.unmountComponentAtNode(document.getElementById("mountpoint")); を実行しましょう。
クリックカウンタが消えます(これは正常)
5. var mount = React.render(React.createElement(TopComponent), document.getElementById("mountpoint"));
を実行しましょう。エラーが出て、それ以降は正常に動作しません(本来はちゃんと復活するべき)
原因はまさに岡部が無駄長文ブログで言い訳してるforceUpdateのせい。
なお、仮にforceUpdateのエラーが起きなかったとすると4と5を繰り返すだけでメモリリークが起きるはず。
理由は、クリックカウンターの
componentDidMount: function()
{
var com = this;
___.world = com.props.___clicks
.compute(function(x){com.forceUpdate();});
___.world = ___totalClicks
.compute(function(x){com.forceUpdate();});
},
から呼び出されるworldcomponentの
compute: function(f)
{
var f1 = function()
{
computingF[computingF.length] = f; //push f
value.val = initialVal;
};
return f1;
},
が配列computingFに関数を追加するだけで、決して解放しないから。
そもそも関数型であるはずのユーザ側が、もろに命令的な再描画呼び出しを自分で登録しなきゃいけないって、
FRP以前にGUIライブラリとしてどうなのよ…
@girls-ping-girls
Copy link

すばらしい解説ありがとう

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment