最后一个子组件覆盖所有子组件

丹克拉松

我有一个包含 3 个孩子的父反应组件:

<ChildComponent category="foo" />
<ChildComponent category="bar" />
<ChildComponent category="baz" />

子组件根据 prop 类别值调用 api:

http://example.com/listings.json?category=foo

在我的操作中,数据按预期返回。但是,当子组件呈现数据时。最后一个孩子 baz 也在 foo 和 bar 中覆盖它的值。

这个问题解决方案似乎在这里给出但我希望这是动态的,并且只依赖于类别道具。这在 Redux 中是不可能做到的吗?

我的子组件如下所示:

class TweetColumn extends Component {

  componentDidMount() {
    this.props.fetchTweets(this.props.column)
  }

  render() {
    const { tweets, column } = this.props
    if (tweets.length === 0) { return null }
    const tweetItems = tweets[column].map(tweet => (
      <div key={ tweet.id }>
        { tweetItems.name }
      </div>
    )
    return (
      <div className="box-content">
        { tweetItems }
      </div>
    )
  }
}

TweetColumn.propTypes = {
  fetchTweets: PropTypes.func.isRequired,
  tweets: PropTypes.array.isRequired
}

const mapStateToProps = state => ({
  tweets: state.tweets.items
})

export default connect(mapStateToProps, { fetchTweets })( TweetColumn )

减速机

export default function tweetReducer(state = initialState, action) {
  switch (action.type) {
    case FETCH_TWEETS_SUCCESS:
      return {
    ...state,
    [action.data[0].user.screen_name]: action.data
      }
    default:
      return state;
  }
}

export default combineReducers({
    tweets: tweetReducer,
})

行动:

export const fetchTweets = (column) => dispatch => {
  dispatch({ type: FETCH_TWEETS_START })
  const url = `${ TWITTER_API }/statuses/user_timeline.json?count=30&screen_name=${ column }`
  return axios.get(url)
    .then(response => dispatch({
      type: FETCH_TWEETS_SUCCESS,
      data: response.data
    }))
    .then(response => console.log(response.data))
    .catch(e => dispatch({type: FETCH_TWEETS_FAIL}))

}
雾化器

每次TweetColumn安装时,您都在进行 api 调用如果您有多个TweetColumn组件并且每个组件都进行 api 调用,那么最后到达的响应将设置state.tweets.items. 那是因为您FETCH_TWEETS_SUCCESS每次都在调度相同的操作(最后一个覆盖前一个)。为了解决这个问题,假设响应有一个category(foo, bar, baz),我会用以下方式编写 reducer:

export default function tweetReducer(state = initialState, action) {
  switch (action.type) {
    case FETCH_TWEETS_SUCCESS:
      return {
          ...state,
          [action.data.category]: action.data
      }
    default:
      return state;
  }
}

然后,您可以在TweetColumn组件中执行以下操作

class TweetColumn extends Component {

  componentDidMount() {
    this.props.fetchTweets(this.props.column)
  }

  render() {
    const { column } = this.props;
    const tweetItems = this.props.tweets[column].map(tweet => (
      <div key={ tweet.id }>
        { tweet.name }
      </div>
    )
    return (
      <div className="box-content">
        { tweetItems }
      </div>
    )
  }
}

const mapStateToProps = state => ({
  tweets: state.tweets
})

const mapDispatchToProps = dispatch => ({
  fetchTweets: column => dispatch(fetchTweets(column))
})

export default connect(
  mapStateToProps,
  mapDispatchToProps,
)( TweetColumn )

您将不得不进行一些验证以确保tweets[column]存在,但您明白了。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Vue.js:将数据从一个子组件传递到具有相同父组件的另一个子组件吗?

来自分类Dev

如何从一个单独的子组件修改一个子组件的道具?

来自分类Dev

将点击事件从一个子组件传递到另一个子组件

来自分类Dev

如何知道另一个子组件中一个子组件的事件

来自分类Dev

如何将子组件路由到另一个子组件

来自分类Dev

路由器只有一个子组件错误

来自分类Dev

显示地图中除最后一个子跨度之外的所有跨度

来自分类Dev

如何使用样式化组件为React Native中的最后一个子元素设置样式

来自分类Dev

如何将数据从一个子组件传递给父组件和其他子组件?

来自分类Dev

如何从子组件访问 Angular 4 中的另一个子组件

来自分类Dev

Angular 2-从“第一个子组件”到父组件的“第二个子组件”的路由

来自分类Dev

Angular 2-从“第一个子组件”到父组件的“第二个子组件”的路由

来自分类Dev

需要所有子菜单位于第一个导航选项下;最后一个子菜单选项具有不同的宽度

来自分类Dev

React Native ScrollView - 如何从另一个子组件按钮滚动到子组件?

来自分类Dev

如何在VueJS中将值从一个子组件传递到另一个子组件?

来自分类Dev

我想在react中访问另一个子组件中一个子组件的值

来自分类Dev

使用useReducer调度一个子组件中的操作并更新另一个子组件中的状态

来自分类Dev

如何在React中将数据值从一个子组件传递到另一个子组件?

来自分类Dev

如何基于事件使用React将一个子react / html组件替换为另一个子组件?

来自分类Dev

如何选择一个Reactjs组件模板中使用的所有子组件(不是DOM元素)?

来自分类Dev

选择一个元素作为具有属性的最后一个子元素

来自分类Dev

CSS:覆盖所有子项的最后一个子项

来自分类Dev

如何避免只单击一个子组件上的@click

来自分类Dev

如何访问另一个子组件中插槽的内容

来自分类Dev

重定向除一个子域外的所有子域?

来自分类Dev

CSS菜单中除最后一个子元素外的所有元素都向左移动一个像素

来自分类Dev

获取SVG元素的最后一个子高度

来自分类Dev

SQL GROUP BY并检索最后一个子记录

来自分类Dev

CSS定位类的最后一个子容器

Related 相关文章

  1. 1

    Vue.js:将数据从一个子组件传递到具有相同父组件的另一个子组件吗?

  2. 2

    如何从一个单独的子组件修改一个子组件的道具?

  3. 3

    将点击事件从一个子组件传递到另一个子组件

  4. 4

    如何知道另一个子组件中一个子组件的事件

  5. 5

    如何将子组件路由到另一个子组件

  6. 6

    路由器只有一个子组件错误

  7. 7

    显示地图中除最后一个子跨度之外的所有跨度

  8. 8

    如何使用样式化组件为React Native中的最后一个子元素设置样式

  9. 9

    如何将数据从一个子组件传递给父组件和其他子组件?

  10. 10

    如何从子组件访问 Angular 4 中的另一个子组件

  11. 11

    Angular 2-从“第一个子组件”到父组件的“第二个子组件”的路由

  12. 12

    Angular 2-从“第一个子组件”到父组件的“第二个子组件”的路由

  13. 13

    需要所有子菜单位于第一个导航选项下;最后一个子菜单选项具有不同的宽度

  14. 14

    React Native ScrollView - 如何从另一个子组件按钮滚动到子组件?

  15. 15

    如何在VueJS中将值从一个子组件传递到另一个子组件?

  16. 16

    我想在react中访问另一个子组件中一个子组件的值

  17. 17

    使用useReducer调度一个子组件中的操作并更新另一个子组件中的状态

  18. 18

    如何在React中将数据值从一个子组件传递到另一个子组件?

  19. 19

    如何基于事件使用React将一个子react / html组件替换为另一个子组件?

  20. 20

    如何选择一个Reactjs组件模板中使用的所有子组件(不是DOM元素)?

  21. 21

    选择一个元素作为具有属性的最后一个子元素

  22. 22

    CSS:覆盖所有子项的最后一个子项

  23. 23

    如何避免只单击一个子组件上的@click

  24. 24

    如何访问另一个子组件中插槽的内容

  25. 25

    重定向除一个子域外的所有子域?

  26. 26

    CSS菜单中除最后一个子元素外的所有元素都向左移动一个像素

  27. 27

    获取SVG元素的最后一个子高度

  28. 28

    SQL GROUP BY并检索最后一个子记录

  29. 29

    CSS定位类的最后一个子容器

热门标签

归档