【发布时间】:2015-04-23 23:58:13
【问题描述】:
尝试学习 react.js 我试图在getInitialState 中设置组件的状态并使用this.state.myproperty 在渲染中访问它,但似乎我做错了什么。这是我到目前为止所做的。
app.jsx 这是我的切入点
var React = require('react');
var App = require('./components/App');
React.render(
<App />,
document.getElementById('content')
);
/components/App.jsx
var React = require('react');
var UserStore = require('../stores/UserStore');
var ActionCreator = require('../actions/Actions');
var UserApp = require('./UserApp');
var App = React.createClass({
propTypes: {
users: React.PropTypes.array,
},
getInitialState: function() {
ActionCreator.loadUsers();
return UserStore.getState();
},
render: function(){
var users = this.state.users;
console.log(this.state);// see what is in the state
console.log(users); // see what is in users
return(
<UserApp users = {users}/>
);
},
});
module.exports = App;
动作创建者
var AppDispatcher = require('../dispatcher/AppDispatcher');
var Constants = require('../constants/Constants');
var ApiClient = require('../clients/ApiClient');
var ActionTypes = Constants.ActionTypes;
var Actions = {
loadUsers: function(){
ApiClient.getUsers(function(usersObj) {
AppDispatcher.handleServerAction({actionType:ActionTypes.LOAD_USERS_SUCCESS, usersObj: usersObj});
}.bind(this), function(error) {
AppDispatcher.handleServerAction({actionType:ActionTypes.LOAD_USERS_FAIL, error: error});
}.bind(this));
},
};
module.exports = Actions;
这是我在控制台中看到的
为什么我不能从状态访问users 还是我做错了?
【问题讨论】:
-
我假设
loadUsers是一个异步操作,而在您记录users时,该操作尚未完成。您仍然可以在this.state中看到结果,因为 Chrome 控制台很神奇。 -
@FelixKling 是的,你是对的 .. 那么我如何才能从数据库中为 actioncreator 的组件加载数据?请参阅编辑我也发布了 actioncreator 的代码
-
您也可以先加载数据并将其作为道具传递给组件,即您正在渲染组件以响应 Ajax 响应。但是,由于您似乎正在使用通量,因此商店应在其更改时发出一个事件,您的组件会侦听该事件,然后自行更新。
标签: javascript reactjs reactjs-flux