redux更新state,视图未更新

发布于 2022-09-11 18:23:08 字数 2579 浏览 12 评论 0

问题描述

图片描述
index.js页面中点击一个商品,dispatch更新store中state的已点商品数组,tabbar.js组件中bagde徽标不是时时更新,能不能时时更新?

相关代码

index.js页面部分代码

// 点击商品,dispatch更新state已点商品数组orderList
this.props.dispatch({
  type: 'application/updateOrder',
  payload: {
    dish: list[index]
  }
});

// connect,redux和页面
let mapStateToProp = state => {
  let {orderList} = state.application;
  return {orderList};
};

export default connect(mapStateToProp)(Home);

store.js文件

export default {
  namespace: 'application',
  state: {
    orderList: []
  },
  reducers: {
    // 更新state
    updateOrder(state, {payload: data}) {
      let stateCopy = Object.assign({}, state);
      let {dish} = data;
      let orderIndex = stateCopy.orderList.findIndex(item => {
        return dish.id === item.id;
      });
      if (orderIndex === -1) {
        stateCopy.orderList.push(data.dish);
      } else {
        ++stateCopy.orderList[orderIndex].orderNum;
      }
      return stateCopy;
    }
  }
};

tabbar.js组件部分代码

render() {
    // badge徽标html
    let badgeHtml = (id, icon) => {
      let orderNumber = this.props.orderList.length;
      if (id !== 2 || orderNumber === 0) {
        return <img src={icon} alt="" className="weui-tabbar__icon" />;
      } else {
        return (
          <span className="weui-tabbar__badge">
            <img src={icon} alt="" className="weui-tabbar__icon" />
            <span className="weui-badge">{orderNumber}</span>
          </span>
        );
      }
    };

    return (
      <div className="weui-tabbar">
        {this.state.barList.map((bar, index) => {
          return (
            <NavLink
              to={bar.url}
              className="weui-tabbar__item"
              activeClassName="weui-bar__item_on"
              key={bar.id}
              exact
            >
              {badgeHtml(bar.id, bar.icon)}
              <p className="weui-tabbar__label">{bar.name}</p>
            </NavLink>
          );
        })}
      </div>
    );
  }

let mapStateToProp = state => {
  let {orderList} = state.application;
  return {
    orderList
  };
};

export default withRouter(connect(mapStateToProp)(Tabbar));

你期待的结果是什么?实际看到的错误信息又是什么?

点击商品后,切换路由后徽标才更新,能不能点击商品,徽标时时更新?
小白求解谢谢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

幸福还没到 2022-09-18 18:23:08

只看组件的render好像没什么问题,是不是用了PureComponent或者自己加了shouldComponentUpdate

§对你不离不弃 2022-09-18 18:23:08

应该需要改写<NavLink/>里的逻辑

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文