Reactjs 反应组件isn';t订阅redux商店
我创建了组件并使用connect()将其连接起来,如下所示:Reactjs 反应组件isn';t订阅redux商店,reactjs,redux,react-redux,Reactjs,Redux,React Redux,我创建了组件并使用connect()将其连接起来,如下所示: function mapStateToProps(state) { return { users: state.users.users } } function mapDispatchToProps(dispatch) { return { userActions: bindActionCreators(UserActions, dispatch) } } export default connect(mapStateT
function mapStateToProps(state) {
return { users: state.users.users }
}
function mapDispatchToProps(dispatch) {
return { userActions: bindActionCreators(UserActions, dispatch) }
}
export default connect(mapStateToProps, mapDispatchToProps)(Test)
不幸的是,当我在chrome中打开React tools时,我发现:
更改状态不会强制组件更新。为什么它不订阅它
编辑:
我正在通过action creator和reducer改变状态。这就是它的样子:
export function addUser(user) {
return function (dispatch) {
axios.post('http://localhost:4200/users/add/user', {user:user})
.then(() => dispatch({
type: USER_ADD,
user: user
})).catch(err => console.log(err));
}
}
export function getUsers() {
return function (dispatch) {
axios.get('http://localhost:4200/users')
.then((response) => dispatch({
type: REQUEST_USERS,
users:response.data
})).catch(err => console.log(err));
}
}
和减速器:
export function users(state = initialState, action) {
switch (action.type) {
case 'USER_ADD':
{
return {
...state,
users: [
...state.users,
action.user
]
}
break;
}
case 'REQUEST_USERS':
{
return {
...state,
users: [
action.users
]
}
break;
}
.........
这是我的全部内容:
class Test extends Component {
constructor(props) {
super(props);
this.state = {
login: "",
password: ""
}
}
handleLoginInputChange = (e) => {
this.setState({login: e.target.value})
}
handlePasswordInputChange = (e) => {
this.setState({password: e.target.value})
}
handleSubmit = (e) => {
e.preventDefault()
let user = {login:this.state.login,
password:this.state.password,userId:Math.floor(Math.random()*(100000))};
this.props.userActions.addUser(user);
}
render() {
return (
<div className="test">
<form>
<input type="text" onChange={this.handleLoginInputChange} value=
{this.state.login} placeholder="login"/>
<input type="text" onChange={this.handlePasswordInputChange}
value={this.state.password} placeholder="pass"/>
<button onClick={this.handleSubmit}>send</button>
</form>
<UsersList users = {this.props.users} />
</div>
)
}
componentDidMount() {
this.props.userActions.getUsers();
}
}
function mapStateToProps(state) {
return { users: state.users.users }
}
function mapDispatchToProps(dispatch) {
return { userActions: bindActionCreators(UserActions, dispatch) }
}
export default connect(mapStateToProps, mapDispatchToProps)(Test)
类测试扩展组件{
建造师(道具){
超级(道具);
此.state={
登录名:“,
密码:“
}
}
handleLoginInputChange=(e)=>{
this.setState({login:e.target.value})
}
handlePasswordInputChange=(e)=>{
this.setState({密码:e.target.value})
}
handleSubmit=(e)=>{
e、 预防默认值()
让用户={login:this.state.login,
密码:this.state.password,userId:Math.floor(Math.random()*(100000))};
this.props.userActions.addUser(用户);
}
render(){
返回(
发送
)
}
componentDidMount(){
this.props.userActions.getUsers();
}
}
函数MapStateTops(状态){
返回{users:state.users.users}
}
功能图DispatchToprops(调度){
返回{userActions:bindActionCreators(userActions,dispatch)}
}
导出默认连接(MapStateTrops、mapDispatchToProps)(测试)
我已将所有内容添加到github,以便您可以看到它
您可能感兴趣的是reducer/users.js、actions/useractions和components/Test.js
从服务器获取数据后,我的状态如下:
我尝试了许多不同的方法。现在我放弃了在添加新用户后更改状态。相反,我制作了一个可以从服务器获取数据的按钮,它正在重新加载页面,因此我对该解决方案不满意。你确定这是正确的吗
function mapStateToProps(state) {
return { users: state.users.users }
}
你是如何将你的减速机绑定到商店的?该状态可能与您在
connect
中预期的状态不同。在安装组件后,您可以发布存储区包含的内容吗?您如何更改redux状态?通过行动调度和减速机?请发布更多代码。您的组件已连接,请显示其他代码,当您单击send
时会发生什么情况。AJAX请求完成后,是否有一个动作被调度?商店是如何因此而被修改的?