当一个组件在渲染之前需要获取某组数据时,我通常会沿着这些方向做一些事情:
class Comp extends Component {
componentWillMount() {
this.props.requestData() // triggeres in action in the wrapper
}
render() {
const { data } = this.props.
return (
<div>
{/* do something with data */}
</div>
)
}
}
export default connect(mapStateToProps, mapDispatchToProps)(Comp)
现在我有两个React SPA,我想在其中使用这个组件。在一个应用程序中,需要在安装组件之前获取所需的数据,而在另一个应用程序中,数据已经存在。
所以我想知道,如果有关于获取数据的问题的最佳实践,这是组件的先决条件。
包装器有没有办法听取Comp
的生命周期?我应该只将requestData
重命名为onComponentWillMount
并听取行动触发吗?
理想情况下,组件不应该关注是否或何时获取。
答案 0 :(得分:1)
您可以创建一个HoC(高阶组件)来包装您的vanilla onComponentWillMount
组件并在onComponentWillReceiveProps
(和requestData()
上)获取数据。当您使用redux时,我想您的#define FIFO "logFifo"
#define MAX_BUF 1024
int main(int argc, char *argv[]){
pid_t pid;
pid=fork();
if(pid<0){
printf("error with fork() \n");exit(1);
}
if(pid == (pid_t) 0){
//FIFO lezen van log_file
int err;
char buf[MAX_BUF];
char * str_result;
FILE *log;
err = mkfifo(FIFO, 0666);
CHECK_MKFIFO(err);
log = fopen(FIFO, "r");
FILE_OPEN_ERROR(log);
while(1){
//presult = pthread_mutex_lock( &log_mutex);
//pthread_err_handler( presult, "pthread_mutex_lock", __FILE__);
str_result = fgets(buf, MAX_BUF,log);
if(str_result != NULL){
FILE *fp;
fp = fopen("gateway.log","w");
fprintf(fp,"%s \n",buf);
//fclose(fp);
}
//presult = pthread_mutex_unlock( &log_mutex);
//pthread_err_handler( presult, "pthread_mutex_unlock", __FILE__ );
sequence++;
//usleep(1);
}
//unlink(FIFO);
}
else{
//Parent code}
return 0;}
回调正在创建一个redux操作,该操作将数据分派到全局存储。或者,如果数据是此组件的本地数据,则可以将其保持在HoC的状态。
答案 1 :(得分:0)
您可以将requestData action creator调用移动到路由定义中的React Router事件&#34; onEnter&#34;。通过这种方式,组件与获取操作创建者分离。