TrackerReact 容器 - 用户设置了 profile.avatar ,但控制台说它未定义
TrackerReact Container - User has profile.avatar set but console says it's undefined
我有一个名为ProfileSettingsContainer
的TrackerReact容器,它将Meteor.user()
返回给user()
函数并将其传递给ProfileSettings
组件。我的最终目标是为用户的个人资料创建一个设置页面,用户可以在其中更改其头像并更新其他信息。这是我的代码。
profile_settings_container.js
import React, { Component } from 'react';
import TrackerReact from 'meteor/ultimatejs:tracker-react';
import ProfileSettings from './profile_settings';
export default class ProfileSettingsContainer extends TrackerReact(Component) {
user(){
return Meteor.user();
}
render() {
let user = this.user;
return (
<ProfileSettings user={user} />
);
}
}
profile_settings.js
import React, { Component } from 'react';
import { Link } from 'react-router';
export default class ProfileSettings extends Component {
constructor(props) {
super(props);
this.state = {
avatar: props.user.profile.avatar || "../../../public/user-default.svg"
}
}
componentWillMount(){
// we create this rule both on client and server
Slingshot.fileRestrictions("avatar", {
allowedFileTypes: ["image/png", "image/jpeg", "image/gif"],
maxSize: 2 * 500 * 500
});
}
upload(){
var userId = Meteor.user()._id;
var metaContext = {avatarId: userId};
var uploader = new Slingshot.Upload("UsersAvatar", metaContext);
uploader.send(document.getElementById('input').files[0], function (error, downloadUrl) { // you can use refs if you like
if (error) {
console.error('Error uploading', uploader.xhr.response);
alert (error);
}
else {
Meteor.users.update(Meteor.userId(), {$set: {"profile.avatar": downloadUrl}});
}
this.setState({avatar: downloadUrl});
}.bind(this));
}
formSubmit(){
let avatarUrl = this.state.avatar;
Meteor.users.update( {_id: Meteor.userId() }, {
$set: {'profile.avatar': avatarUrl}
});
}
render() {
return (
<div>
<div className="sticky-header">
<h3>Settings</h3>
</div>
<form>
<div className="row well">
<div className="col-md-6">
<div className="form-group">
<label htmlFor="exampleInputFile">File input</label>
<input type="file" id="input" onChange={this.upload.bind(this)} />
<p className="help-block">Image max restriction: 2MB, 500x500. Cropped: 200x200</p>
</div>
</div>
<div className="col-md-6 utar-r">
<img src={this.state.avatar} height="200" width="200" alt="..." className="img-rounded" />
</div>
<div className="form-group">
<button className="btn btn-lg btn-primary btn-block" type="submit" onClick={this.formSubmit.bind(this)}>Update Profile</button>
</div>
</div>
</form>
<footer className="sticky-footer">
<Link to="/app/profile">
<button className="profile-edit bg-black">
<h3>Cancel</h3>
</button>
</Link>
<Link to="">
<button className="profile-edit">
<h3>Save Changes</h3>
</button>
</Link>
</footer>
</div>
);
}
}
这是我在加载设置页面时遇到的控制台错误:profile_settings.js:11Uncaught TypeError: Cannot read property 'avatar' of undefined
除此之外,我还检查了RoboMongo,可以确认user.profile.avatar存在。我在signup
组件的Accounts.createUser()
函数中分配了"/user-default.svg"的默认图像。
用户可能尚未加载(定义),因此只需像if (user) return(<ProfileSettings user={user}/>) else return ""
一样放置 smth
相关文章:
- jQuery控制台错误:无法读取属性'top'的未定义
- Meteor js-控制台显示'未定义'即使返回结果
- 对象属性在控制台.log中显示为未定义
- 出现“未捕获的类型错误:未定义不是函数”控制台错误
- 尝试从我的 chrome 扩展程序访问 gmail 中的 iframe 时出现未定义的错误,但不是从开发者控制台访问
- 如何处理错误'控制台未定义'在powershell中
- 控制台:引用错误:未定义停止传播
- 属性未定义,但控制台.log可以看到它
- Meteor:在控制台(服务器)上可见,未定义发送到客户端
- 抄写员 JS 错误 - 控制台.log未定义
- 数组中的字符串显示为未定义,尽管在几行之前成功.log控制台
- 博客最近帖子控制台错误:无法读取未定义的属性“标题”
- 控制台.log返回一个额外的未定义
- E/Web 控制台 (8272): 未捕获的引用错误: 在视图寻呼机中加载 Web 视图时未定义函数名称:1
- 为什么当我将变量记录到控制台时,我得到了输出,但是当我返回它时,我收到“未定义”
- 节点.js控制台.log抛出我未定义
- Internet Explorer:“;控制台未定义”;错误
- 控制台说JavaScript数组是未定义的,但我'我可以记录它的内容
- IE8中控制台未定义问题
- Chrome -运行javascript功能从浏览器控制台"未定义"