現在ブログアプリのようなものを作ろうと考えています。
記事を追加する際に記事のタグをthis.state.allTagsから選択し、選ばれたものをselectedTagsに格納し
投稿が完了した段階でselectedTagsのcountを+1してallTagsの該当タグに上書きをしたいと考えています。
javascript
1this.state = { 2 allTags, 3 selectedTags: [], 4} 5 6// allTagsはタグ登録フォームから追加され、この配列に新しく加わります 7allTags = [ 8 { 9 tagText: 'javascript', 10 count: 16, 11 }, 12 { 13 tagText: 'react', 14 count: 12, 15 }, 16 { 17 tagText: 'react-native', 18 count: 14, 19 }, 20 { 21 tagText: 'redux', 22 count: 8, 23 }, 24]; 25 26 27// 他のコンポーネントからchildTagsとして['react','redux']のような選択したタグのtagTextの配列が送られてきます 28updateTagCount = childTags => { 29 let selectedTags = []; 30 let unselectedTags = []; 31 32 for (let i = 0; i < childTags.length; i++) { 33 selectedTags = this.state.allTags.find(t => t.tagText === childTags[i]); 34 35 selectedTags.count++; 36 37 unselectedTags = this.state.allTags.filter( 38 t => t.tagText !== childTags[i], 39 ); 40 } 41 const { tagText, count } = selectedTags; 42 this.setState({ 43 allTags: [...unselectedTags, { tagText, count }], 44 }); 45 }; 46
一応上記のコードで実現したいことはできるのですが、unselectedTagsとして出力されるのが、childTags[i]の最後の配列の要素だけなので、このやり方は正しいやり方ではない気がしています。
もし何かもっとスマートなやり方等の意見がありましたら、アドバイスいただけますでしょうか。
よろしくお願いいたします!
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/05 00:47
2018/12/05 01:14
2018/12/05 03:05