我已经连接了一个简单的React组件(映射一个简单的数组/状态)。为了避免引用商店的上下文,我想要一种直接从道具获取“分派”的方法。我见过其他人使用这种方法,但由于某些原因无法访问:)
下面是我当前使用的每个npm依赖项的版本
"react": "0.14.3",
"react-redux": "^4.0.0",
"react-router": "1.0.1",
"redux": "^3.0.4",
"redux-thunk": "^1.0.2"
下面是组件w/connect方法
class Users extends React.Component {
render() {
const { people } = this.props;
return (
<div>
<div>{this.props.children}</div>
<button onClick={() => { this.props.dispatch({type: ActionTypes.ADD_USER, id: 4}); }}>Add User</button>
</div>
);
}
};
function mapStateToProps(state) {
return { people: state.people };
}
export default connect(mapStateToProps, {
fetchUsers
})(Users);
如果你需要看减速机(没有什么令人兴奋的,但在这里)
const initialState = {
people: []
};
export default function(state=initialState, action) {
if (action.type === ActionTypes.ADD_USER) {
let newPeople = state.people.concat([{id: action.id, name: 'wat'}]);
return {people: newPeople};
}
return state;
};
如果你需要看看我的路由器是如何配置的w/redux
const createStoreWithMiddleware = applyMiddleware(
thunk
)(createStore);
const store = createStoreWithMiddleware(reducers);
var Route = (
<Provider store={store}>
<Router history={createBrowserHistory()}>
{Routes}
</Router>
</Provider>
);
使现代化
看起来如果我在连接中省略了我自己的调度(目前在上面我显示的是getchUser),我将获得免费的调度(只是不确定这是否是使用异步操作的设置通常的工作方式)。人们是混搭还是全有还是全无?
[mapDispatchToProps]
虽然您可以将调度
作为调度ToProps
的一部分向下传递,但我建议避免直接从组件中访问store
或调度
。看起来通过在连接的第二个参数调度ToProps
中传递一个绑定的操作创建者会更好
查看我在这里发布的一个示例https://stackoverflow.com/a/34455431/2644281如何传递一个“已经绑定的操作创建者”,这样你的组件就不需要直接知道或依赖于存储/调度。
抱歉简短。我会更新更多信息。
你通常可以根据自己的喜好进行混搭。
如果需要,您可以将dispatch
作为道具传递:
export default connect(mapStateToProps, (dispatch) => ({
...bindActionCreators({fetchUsers}, dispatch), dispatch
}))(Users);
我不确定如何使用fetchUsers
(作为异步函数?),但是您通常会使用类似于bindActionCreators
的东西来自动绑定分派,这样您就不必担心直接在连接的组件中使用dispatch
。
使用dispatch
directory排序将哑的、无状态的组件与redux进行耦合。这会降低它的便携性。
默认情况下,mapDispatchToProps
只是dispatch=
如果将自定义函数传递给
mapDispatchToProps
,则可以对该函数执行任何操作
举几个例子:
// inject onClick
function mapDispatchToProps(dispatch) {
return {
onClick: () => dispatch(increment())
};
}
// inject onClick *and* dispatch
function mapDispatchToProps(dispatch) {
return {
dispatch,
onClick: () => dispatch(increment())
};
}
为了节省你一些键入Redux提供了
bindActionCreator()
,让你把这个:
// injects onPlusClick, onMinusClick
function mapDispatchToProps(dispatch) {
return {
onPlusClick: () => dispatch(increment()),
onMinusClick: () => dispatch(decrement())
};
}
为此:
import { bindActionCreators } from 'redux';
// injects onPlusClick, onMinusClick
function mapDispatchToProps(dispatch) {
return bindActionCreators({
onPlusClick: increment,
onMinusClick: decrement
}, dispatch);
}
或者更短,当道具名称匹配动作创建者名称:
// injects increment and decrement
function mapDispatchToProps(dispatch) {
return bindActionCreators({ increment, decrement }, dispatch);
}
如果您愿意,您可以手动添加
dispatch
:
// injects increment, decrement, and dispatch itself
function mapDispatchToProps(dispatch) {
return {
...bindActionCreators({ increment, decrement }), // es7 spread syntax
dispatch
};
}
没有官方建议是否应该这样做。
连接()
通常作为Redux感知和Redux不感知组件之间的边界。这就是为什么我们通常觉得同时注入绑定操作创建者和调度
是没有意义的。但是如果你觉得你需要这么做,请随意。
最后,您现在使用的模式是一个比调用
bindActionCreator
更短的快捷方式。当您所做的只是返回bindActionCreator
时,您可以省略调用,而不是这样做:
// injects increment and decrement
function mapDispatchToProps(dispatch) {
return bindActionCreators({ increment, decrement }, dispatch);
}
export default connect(
mapStateToProps,
mapDispatchToProps
)(App);
可以写成这样
export default connect(
mapStateToProps,
{ increment, decrement } // injects increment and decrement
)(App);
然而,当您需要更定制的东西时,您必须放弃这个漂亮的简短语法,比如传递
dispatch
。
问题内容: 我有一个连接的简单React组件(映射了一个简单的数组/状态)。为了避免引用商店的上下文,我想要一种直接从道具中获取“发货”的方法。我见过其他人正在使用这种方法,但是由于某些原因无法使用它:) 这是我当前正在使用的每个npm依赖项的版本 这是带有连接方法的组件 如果您需要查看减速器(没什么令人兴奋的,但是这里) 如果您需要查看如何使用Redux配置路由器 更新 看起来如果我在连接中省略
我把这个问题贴在这里只是为了确保我没有在错误的树上吠叫。 如何获得使用(和免费)到MongoDB的连接数,但从客户端的角度(例如Java客户端),使用4. x驱动程序? 有关于使用serverStatus的帖子(使用java获取mongoDB中打开的连接数),但它假定对mongoDB具有“admin”访问权限。使用“普通用户”(具有较低权限(例如仅访问一个数据库)的db用户)无法运行serverS
问题内容: import urllib2 到目前为止,一切都很好。 但是我只希望纯文本HTML中的href链接。我怎么解决这个问题? 问题答案: 尝试使用Beautifulsoup: 如果您只想要以开头的链接,则应使用: 在带有BS4的Python 3中,它应该是:
我有一个短信api在PHP,我打电话发送短信。我通过一些json和一个url回调来获得响应状态,短信被发送。 之后服务器调用我的回调url,但我不能得到响应体。$_GET和$_POST是空的...留档不存在。它应该有一些json。有人能帮帮我吗?提前感谢
我所拥有的只是WS服务器的url和授权字符串令牌。 稍后,我必须能够向该连接发送请求,监听来自WS服务器的即将到来的数据,并关闭连接。我对这个新的WS世界有困难,总是只使用REST(也使用okhttp3)
我正在制作一个实时多人游戏socket.io和node.js,我有一个html文件,运行一个公共脚本连接到服务器并运行命令,以及定义我需要的库