我一直在努力解决这个问题很长一段时间,但未能找到任何答案.
我使用react-meteor-data来管理我的数据,并在我的流星应用程序中做出反应.处理mongo的数据时工作正常,但我不能让它与道具反应.
在这里,在App.js,我打电话给我的容器,我想反应和重新呈现在应用变化的状态.
<MyContainer someState={this.state.MyState} />
Run Code Online (Sandbox Code Playgroud)
在MyContainer.js中,我有一个createContainer来自反应流星数据
export default createContainer(params => {
Meteor.subscribe('someCollection');
return {
someCollection: SomeCollection.find({}).fetch(),
stateFromParent: params.someState
};
}, MyContainer);
Run Code Online (Sandbox Code Playgroud)
这在第一次渲染组件时工作正常,MyContainer正确获取MyState.
事情是,当MyState从App改变时,我可以在Chrome Dev React工具中看到它确实已更新createContainer(ReactMeteorDataComponent具有正确更新状态的道具)但该createContainer功能未运行,因此props不更新MyContainer.
所以这些props是从谁更新,ReactMeteorDataComponent而不是MyContainer由谁无限期地保存数据.它就像createContainer不考虑其prop的更新有变化,因此不运行其功能.
我真的觉得我错过了一些东西,因为这似乎是非常基本的东西,谢谢你的帮助.
我正在尝试显示 admin Dashboardreact并且Meteor仅当当前用户是admin 时。
我正在调用一个服务器方法,该方法检查用户权限并仅在此方法返回时呈现管理组件true。
此服务器调用是异步的,因此组件未呈现,通常我使用状态管理此异步调用,但我不想在此处公开任何状态(不希望有人更改状态并访问管理仪表板) .
这是代码:
export default class AdminChecker extends Component {
isItAdmin() {
// Get the id of current user
const userId = Meteor.userId();
if (userId) {
// call a server method which returns true if current user is Admin
Meteor.call('checkAdminId', userId, (err, authorized) => {
if (err) {
console.log(err);
return null;
}
return (authorized) ? <AdminDashboard /> : null;
});
}
}
render() {
return (
<div …Run Code Online (Sandbox Code Playgroud)