Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript onClick在使用firestore和React、redux安装组件时立即启动_Javascript_Reactjs_Redux_Google Cloud Firestore_Material Ui - Fatal编程技术网

Javascript onClick在使用firestore和React、redux安装组件时立即启动

Javascript onClick在使用firestore和React、redux安装组件时立即启动,javascript,reactjs,redux,google-cloud-firestore,material-ui,Javascript,Reactjs,Redux,Google Cloud Firestore,Material Ui,我有一个组件,它显示一个项目。对于每个项目,都有一个删除按钮,但由于某种原因,我所有项目的删除按钮都会立即被“按下”。 为什么会发生这种情况?我正在使用redux和firestore。我认为这可能与实时侦听器有关,但在向数据库添加数据方面没有任何问题 Projects.js componentDidMount = () => { this.props.projectActions.registerProjectListener(); }; renderProjects

我有一个组件,它显示一个项目。对于每个项目,都有一个删除按钮,但由于某种原因,我所有项目的删除按钮都会立即被“按下”。 为什么会发生这种情况?我正在使用redux和firestore。我认为这可能与实时侦听器有关,但在向数据库添加数据方面没有任何问题

Projects.js

  componentDidMount = () => {
    this.props.projectActions.registerProjectListener();
  };

  renderProjects = () => {
    const { projects } = this.props.projects;
    const { classes, projectActions } = this.props;
    return (
      <Paper elevation={0} square={true} className={classes.projectPaper}>
        <Box fontSize="h5.fontSize" textAlign="center">
          Your Projects:
        </Box>
        {projects &&
          projects.map(project => {
            return <Project {...{ key: project.id, project, projectActions }}></Project>;
          })}
        <Grid container className={classes.grid} direction="row" justify="flex-end" alignItems="center">
          <AddProject {...{ projectActions }}></AddProject>
        </Grid>
      </Paper>
    );
  };


您需要传递对函数的引用。使用以下命令更新IconButton组件

<IconButton 
    onClick={() => projectActions.deleteProject(project.id)}>
    <ClearIcon></ClearIcon>
</IconButton>
projectActions.deleteProject(project.id)}>
export const deleteProject = id => {
  return dispatch => {
    console.log(db.collection("projects").doc(id));
    // db.collection("projects")
    //   .doc(id)
    //   .delete();
    dispatch({ type: ActionTypes.DELETE_PROJECT });
  };
};

export const registerProjectListener = () => {
  let projects = [];
  return dispatch => {
    db.collection("projects").onSnapshot(snapshot => {
      snapshot.docChanges().forEach(change => {
        if (change.type === "added") {
          console.log(change.doc.data());
          projects.push({ ...change.doc.data(), ...{ id: change.doc.id } });
        } else if (change.type === "removed") {
          // projects.filter(()=> )
        }
      });
      dispatch({ type: ActionTypes.REGISTER_LISTENER, projects: projects });
    });
  };
};

<IconButton 
    onClick={() => projectActions.deleteProject(project.id)}>
    <ClearIcon></ClearIcon>
</IconButton>