我看到了两种做同样事情的方法,但我不确定什么是正确的方法。
组件
import React, {Component} from 'react';
import {bindActionCreators} from 'redux';
import {connect} from 'react-redux';
import {selectUser} from '../actions/index'
class UserList extends Component {
renderList() {
return this.props.users.map((user) => {
return (
<li
key={user.id}
onClick={() => this.props.selectUser(user)}
>
{user.first} {user.last}
</li>
);
});
}
render() {
return (
<ul>
{this.renderList()}
</ul>
);
}
}
// Get apps state and pass it as props to UserList
// > whenever state changes, the UserList will automatically re-render
function mapStateToProps(state) {
return {
users: state.users
};
}
// Get actions and pass them as props to to UserList
// > now UserList has this.props.selectUser
function matchDispatchToProps(dispatch){
return bindActionCreators({selectUser: selectUser}, dispatch);
}
// We don't want to return the plain UserList (component) anymore, we want to return the smart Container
// > UserList is now aware of state and actions
export default connect(mapStateToProps, matchDispatchToProps)(UserList);
https://github.com/buckyroberts/react-redux-boilerplate
import React from "react"
import { connect } from "react-redux"
import { fetchUser } from "../actions/userActions"
import { fetchTweets } from "../actions/tweetsActions"
@connect((store) => {
return {
user: store.user.user,
userFetched: store.user.fetched,
tweets: store.tweets.tweets,
};
})
export default class Layout extends React.Component {
componentWillMount() {
this.props.dispatch(fetchUser())
}
fetchTweets() {
this.props.dispatch(fetchTweets())
}
render() {
const { user, tweets } = this.props;
if (!tweets.length) {
return <button onClick={this.fetchTweets.bind(this)}>load tweets</button>
}
const mappedTweets = tweets.map(tweet => <li>{tweet.text}</li>)
return <div>
<h1>{user.name}</h1>
<ul>{mappedTweets}</ul>
</div>
}
}
第一种方法使用两个不同的函数MapStateToProps()
和MatchDispatchToProps()
,而另一种方法使用@Connect(...)
当我使用@Connect时,我会收到一大堆警告,说它还没有最终完成,可能会更改。
@
符号是一个仍被认为是实验性的修饰符。所以我会用它来承担你的风险。您的第一个代码块是按照官方文档中描述的更安全的方法。这两个街区本质上都做着同样的事情,但装饰者比任何东西都更重要。
参考资料:
问题内容: 我正在尝试决定要选择哪种mime类型来返回mp3数据(由php提供) 根据此mime类型列表:http : //www.webmaster-toolkit.com/mime-types.shtml 这些之间有什么区别,我应该使用哪个? 问题答案: 最好的选择是使用RFC定义的 mime-type 。
我一直在写一些批处理文件,我偶然发现了这本用户指南,它提供了大量信息。它告诉我的一件事是,行不仅可以用注释,还可以用注释。上面写着: 批处理代码中的注释可以使用双冒号进行,这比使用REM命令更好,因为标签是在重定向符号之前处理的。
问题内容: 我已经看到以下内容: AngularJS文档也提到了这一点,我不太了解。 这些方法之间有什么区别吗?特别是Angular文档的最后一种方法是做什么的?一个比另一个更好用吗? 问题答案: 它们大致相同,但有一些区别: 如果您 在页面末尾 (而不是在标题中)加载 了 脚本,这将起作用。 否则,在引导应用程序时将不会加载DOM(不会编译任何模板,指令不会有任何效果)。 此作品:plnkr 这
这些方法有什么区别吗?特别是最后一种方法是什么?一个比另一个好用吗?
我有一个客户端anger-js应用程序。我有一个服务器端nodejs应用程序接口。客户端和服务器端应用程序位于不同的域上。客户端使用API获取或发布一些数据。客户端还需要从服务器端获取图像并在浏览器中显示它们。 我使用护照nodejs模块进行身份验证。我不知道哪种身份验证策略更适合我。我认为有两种类型的身份验证策略:基于令牌的和基于cookie的。我认为这两种类型在我的情况下都没用: > < li
问题内容: 我想使用Java 7和NIO 2编写异步服务器。 但是我应该怎么用呢? 例如,如果我开始: 然后,当我这样做时,该程序 终止, 因为该调用是 异步的 。如果我将该代码置于无限循环中,则会抛出。 关于如何使用编写一个简单的异步服务器的任何建议? 这是我的完整示例(类似于JavaDoc中的示例): 问题答案: 您走在正确的轨道上,从完成的回调中调用accept()以便接受更多连接应该起作用