Я думаю, @Ari дал мне хороший ответ для redux
людей как я тоже боролся. Я не уверен, что он является неизменным, но он работает !
Я просто отправлю getVehicles
действие внутри addListener
и оно просто работает!
Ниже является компонентом пользовательского интерфейса, функция конструктора которого делает магию!
//- 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());
});
}
}
Ниже является дб файл/модели, используемые там в конструкторе.
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]});
Ниже это действия/файл транспортного средства, который получает отправляется в конструкторе выше.
import { queryVehicle } from './../db/queryVehicle';
export function getVehicles() {
const vehicles = queryVehicle();
return function(dispatch) {
dispatch({type: "GOT_VEHICLES", payload: vehicles});
}
}
Ниже моя функция queryVehicle, что делает обработку запросов с именем в файле действий выше.
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 };
отказ от ответственности Я не знаю, если этот код выглядит достаточно неизменны, или после хорошей Redux практики, потому что я только начиная с Redux так дайте мне некоторые комментарии советуя если г «Я делаю что-то неправильно.
Я также думаю, что реализация reducer
не имеет большого значения в этом здесь.
Спасибо @ Ари, как я мог установить опоры в приемник событий ?. Замените 'this.forceUpdate()' на 'super (props)'? – ThorbenA
Для вашего примера вы, вероятно, захотите вместо этого вызвать 'setState'. Вместо того, чтобы вычислять 'dogProp' в' render', вы вместо этого помещаете его в 'state', который автоматически запускает повторную визуализацию. Что-то вроде 'this.setState ({dogProp: this.realm.objects ('Dog'). Length})'. Вы также хотели бы реализовать 'getInitialState'. – Ari
еще раз спасибо @Ari. Любой способ сделать это без введения локального состояния компонента? (Я использую Redux) – ThorbenA