根据Cookie获取组件内数据

时间:2019-05-29 22:52:56

标签: reactjs react-cookie

我有一个像这样的组件:

class MyComponent extends React.PureComponent {
  componentDidMount() {
    const { params } = this.props.match
    fetch(`/o/${params.id}`, {
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
      }
    })
    .then(r => r.json())
    .then(json => {
      this.props.setData(json)
    })
  }
  render() {
    const { t, payload, cookies } = this.props;
    return <div>
      {cookies.cookies.language}
      {payload.myData}
    </div>
  }
}

因此,我在组件中获取数据。但是重要的是,结果数据取决于我的一个cookie。因此,在更改Cookie之后,我还想重新获取数据,但是我不知道哪种方法最优雅。我使用react-cookie库,因此现在每个cookie更改都在我的视图中更新。但是,当然,用render方法重新获取我的数据不是一个好主意,我认为componentDidUpdate也是一个不好的地方。那么,我该如何解决这个问题?

PS。我也使用Redux。

1 个答案:

答案 0 :(得分:1)

您需要一个ifelse(rep(is.na(last(enddt)), n()), as.POSIXct("2019-03-31 23:59:59"), enddt),在其中可以检查Cookie是否已更改,然后进行提取调用。

会是这样的:

library(tidyverse)
library(lubridate) #mdy_hm function

df <- data.table::fread(
  "ID   stdt    enddt   goal
  1 11/21/2018 7:11 3/31/2019 23:59 3/31/2019 23:59
  1 11/21/2018 7:11 11/22/2018 5:19 11/22/2018 5:19
  1 11/22/2018 5:19     3/31/2018 23:59
  2 12/17/2018 16:49    3/31/2019 23:59 3/31/2019 23:59
  2 12/17/2018 16:49    12/21/2018 23:05    12/21/2018 23:05
  2 12/21/2018 23:05    1/16/2019 8:32  1/16/2019 8:32"
  ) %>% 
  mutate_at(vars(c(ends_with("dt"), "goal")), mdy_hm)


df %>%
  group_by(ID) %>%
  mutate(
    # this puts a T/F in every column, note, is.na vs is.null
    missing_date = is.na(last(enddt)),
    goal = ifelse(missing_date, as.POSIXct("2019-03-31 23:59:59"), enddt)
  ) %>% 
  ungroup() %>% 
  # 1970 instead of 1960
  mutate(goal = as.POSIXct(goal, origin = "1970-01-01")) %>% 
  # remove this column
  select(-missing_date)

但是,看起来这种逻辑与componentDidUpdate()一起应该在一个不纯组件上移动一个组件。