Tôi nghĩ @Ari đã cho tôi một câu trả lời tốt cho redux
folks khi tôi cũng đang đấu tranh. Tôi không chắc chắn nếu nó không thay đổi đủ nhưng nó hoạt động!
Tôi đang đơn giản gửi đi getVehicles
hành động bên trong addListener
và nó chỉ hoạt động!
Dưới đây là thành phần giao diện người dùng có hàm tạo nên sự kỳ diệu!
//- importing my realm schema
import realm from '../../db/models';
//- Importing my action
import { getVehicles } from './../../actions/vehicle';
@connect((store) => {
return {
vehicle: store.vehicle.vehicles
}
})
export default class Devices extends Component {
constructor(props) {
super(props);
realm.addListener('change',() => {
props.dispatch(getVehicles());
});
}
}
Dưới là db/mô hình tập tin sử dụng hết có ở các nhà xây dựng.
import Realm from 'realm';
class VehicleSchema {};
VehicleSchema = {
name: 'vehicleInfo',
properties: {
vehicleName: 'string',
vehicleNumber: 'string',
vehiclePassword: 'string',
vehiclePasswordTrigger: 'bool',
vehicleType: 'string',
vehiclePicture: { type: 'data', optional: true }
}
};
export default new Realm({schema: [VehicleSchema]});
Dưới là những hành động/tập tin phương tiện, mà được cử trong các nhà xây dựng ở trên.
import { queryVehicle } from './../db/queryVehicle';
export function getVehicles() {
const vehicles = queryVehicle();
return function(dispatch) {
dispatch({type: "GOT_VEHICLES", payload: vehicles});
}
}
Dưới là chức năng queryVehicle của tôi mà không được truy vấn gọi là trong tập tin hành động trên.
import vehicleModel from './models';
const queryVehicle = (queryInfo="vehicleInfo", filter='') => {
const objects = vehicleModel.objects(queryInfo);
if(filter.length === 0) return objects;
let results = objects.filtered(filter);
return results;
};
export { queryVehicle };
từ chối trách nhiệm Tôi không biết nếu mã này trông đủ bất biến, hoặc sau tốt nguyên nhân thực hành Redux Tôi chỉ bắt đầu với Redux để cho tôi một số ý kiến tư vấn nếu tôi đang làm gì đó sai.
Tôi cũng sẽ đoán việc triển khai reducer
sẽ không quan trọng nhiều ở đây.
Cảm ơn @Ari, làm cách nào tôi có thể đặt đạo cụ thành người nghe sự kiện ?. Thay thế 'this.forceUpdate()' bằng 'super (props)'? – ThorbenA
Ví dụ, bạn có thể muốn gọi 'setState' thay thế. Thay vì tính toán 'dogProp' trong' render', bạn sẽ đặt nó trong 'state' sẽ tự động kích hoạt tái render. Một cái gì đó như 'this.setState ({dogProp: this.realm.objects ('Dog'). Length})'. Bạn cũng sẽ muốn thực hiện 'getInitialState'. – Ari
cảm ơn một lần nữa @Ari. Bất kỳ cách nào để làm điều đó mà không cần giới thiệu trạng thái thành phần cục bộ? (Tôi đang sử dụng Redux) – ThorbenA