Reactjs 反应组件isn';t订阅redux商店

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

我创建了组件并使用connect()将其连接起来,如下所示:

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请求完成后,是否有一个动作被调度?商店是如何因此而被修改的?