1
私は基本的な条件付きレンダリングに問題があります。私はからデータを取得していた場合、私はfirebaseに保存されているすべての製品を持っていない場合は、メッセージをレンダリングしようとしているReact、Mobx、Firebase条件付きレンダリング
import { ObservableMap, observable, action, computed } from 'mobx';
import fb from '../firebase';
class ProductStore {
@observable products = [];
constructor() {
fb.products.on('value', (snapshot) => {
this.products = [];
snapshot.forEach((child) => {
this.products.push({
id: child.key,
...child.val()
});
});
});
}
@action addProduct = (product) => {
fb.products.push(product);
}
@action removeProduct = (product) => {
fb.products.child(product.id).set({});
}
@computed get totalProducts() {
return this.products.length;
}
}
const store = new ProductStore();
export default store ;
、およびロード...メッセージ: は基本的に私はこのお店を持っていますfirebaseので、私は、これは今やっている:
const ProductList = (props) => {
const renderView =() => {
if(props.products.length){
return props.products.map((product,index) => <Product key={index} product={product} removeProduct={props.removeProduct}/>);
}else{
return <p>Loading...</p>
}
}
return (
<div className="product-list">
{console.log(props.products)}
{renderView()}
</div>
)
}
がどのように私はfirebase上の任意のデータを持っていない場合、メッセージ「が見つかりません製品」を印刷することができますか?私は最初に配列に観測可能な製品を初期化し、次にロードメッセージを表示し、その後にデータをロードしますが、firebaseのすべてのデータを削除すると、ロードメッセージが表示されます。
感謝の男!明日は仕事でそれを試してみるよ! :) 1つの質問、あなたは新しい配列の権利を返すために置換を使用している?不変にするには? –
@LucaBaxter素晴らしい!私はMobX配列[** replace **](https://mobx.js.org/refguide/array.html)メソッドを使用して、配列の内容を置き換え、観測可能な配列参照を上書きしません普通の配列。微妙なバグをこのように導入することができます。 – Tholle