我有一个像这样的组件:
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。
答案 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()
一起应该在一个不纯组件上移动一个组件。