データを取得しているときにスピナーを表示するのに問題があります。私はstate.isLoadingを持っていますが、getdata.getPossible()関数が起動する前にそれをtrueに設定することはできません。相続人は私が持っている:データが反応しているときにスピナーを表示
class GetData extends Component {
constructor() {
super();
this.state = {
lastdraw: {},
alldraws: [],
bets: [],
isLoading: false,
showBets: false
};
}
componentDidMount() {
getdata.getLastResult().then((result) => {
this.setState({lastdraw: result.data.drawns[0]})
})
}
getMore() {
this.setState({isLoading: !this.state.isLoading})
this.setState({bets: getdata.getPossible(5), showBets: !this.state.showBets})
}
render() {
return (
<div>
<h1>{this.props.title}</h1>
<h3>{moment(this.state.lastdraw.date).format('LL')}</h3>
<div><span>{this.state.lastdraw.numbers}</span> + <span>{this.state.lastdraw.stars}</span></div>
<Btn onClick={this.getMore.bind(this)}>Generate</Btn>
{this.state.showBets ? this.state.bets.map((bet, i) => {return (<PossibleKey key={this.state.bets[i].key} bets={bet}/>)}) : null}
<Loader show={this.state.isLoading}/>
</div>
);
}
}
そしてLoaderコンポーネントは、このようなものです:
function Loader(props) {
return props.show ? (
<div className='overlay'>
<div className='leftEye'></div>
<div className='rightEye'></div>
<div className='mouth'></div>
<p>The Universe is aligning. Please wait...</p>
</div>
) : null
}
私が達成したいどのようなことは、単に真isLoading状態を設定することにより、他の場所で使用するローダーコンポーネントのための方法でありますまたはfalse。 getMore()関数は、getPossible(n)の実行後にのみローダー状態をトリガーします。
状態が設定された後にのみローダーが小道具を受け取ることと関係していると思います。どのようにローダーをオン/オフすることができますか?
私はあなたの提案を取り、これとクリックハンドラ製: 'handleClick(){ this.setState((prevState、小道具)=>({ isloading:真 })) getdata.getPossibleを( 5).then:)(結果=> { this.setState((prevState、小道具)=>({ 賭けを})結果)} .then((完了)=> { this.setState(( prevState、props)=>({ isloading:false })) }) }です。それはうまくいっています。これは、これまでにない最も洗練されたコードではありません。そうでなければ、ローディング状態を親コンポーネントに持ち上げなければならない、あるいはそれ以上にして小道具として渡す必要があります。 – talvasconcelos
すべてのコードは次のURLでご覧いただけます:https://github.com/talvasconcelos/millions – talvasconcelos