私はフィルタリングにramda
を使用しようとしています。私はRamdaのドキュメントを詳しく読んだ。Ramadを使用してsetStateに反応する
しかし、フィルターをかけようとしたところ、私のsetState
やコンソールログには何の影響もありません。
ライブコードサンプル:
https://codesandbox.io/s/qY219X102
私の試み:
import React from 'react';
import { render } from 'react-dom';
import R from 'ramda';
const o = {
movies: [
{ name: 'movie 1', genres: ['comedy', 'action'] },
{ name: 'movie 2', genres: ['action', 'drama'] },
{ name: 'movie 3', genres: ['drama', 'action'] },
],
};
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
movies: o,
};
}
getGenre =() => {
R.pipe(
R.prop(o.movies),
R.filter(
R.and(
R.propSatisfies(R.find(R.equals('action')), 'genres'),
R.propSatisfies(R.find(R.equals('comedy')), 'genres'),
),
),
);
this.setState({ o });
console.log('genre', o);
};
render() {
const rawmovies = Object.keys(o).map(e => o[e]);
const movies = [].concat.apply([], rawmovies);
return (
<div>
<button onClick={this.getGenre}>Action genre</button>
{movies.map(e => <span key={e.name}> {e.name}</span>)}
</div>
);
}
}
render(<App />, document.getElementById('root'));
ありがとうございました。入れ子になったら "ジャンル"の値はどのように得られますか? EG:ジャンル:[{名前: '映画'、タイプ:1}、{名前: '冒険'、タイプ:2}]、}、 '? – Ycon
私はこれを行うかもしれません: 'R.where({genres:R.pipe(R.pluck( 'name')、R.contains( 'drama')}}'、またはそれを関数に抽出します。想像できる最も効率的なコードではありませんが、問題が発生した場合にのみ心配しています。 –
私は最初のオプションを試しましたが、いいえ私はあなたにあなたを見せるためにコードを入れました - https://codesandbox.io/s/DkNzqx7Wn – Ycon