Snackbar not opening after Mutation

落爺英雄遲暮 提交于 2020-03-04 05:03:54

问题


I want that a snackbar opens up in case the mutation is not completely successful. In this case, handleOpen() is called. For When I hit the button, the mutation takes place and my page crashes. I get an error that

TypeError: undefined is not an object (evaluating 'children.props.style')

When I remove the setStatus from my handleOpen function, the page doesn't crash. Oops is printed.

For Snackbar, I am using ``open={status}```

Here's my remaining code:

export default function RemoveUserPage() {
  const [state, setState] = useState({
    email: '',
  });  
  const [status, setStatus] = useState(false);
  // onCompleted= {(e: any) => setStatus(true)}

  function submitForm(RemoveUserMutation: any) {
    const { email} = state;
    if(email){
      RemoveUserMutation({
        variables: {
            email: email,
        },
    }).then(({ data }: any) => {
      console.log('info: ', data.deleteUser);
    })
    .catch(console.log)
    }
  }
//In my case, the mutation is unsucessful so handleOpen()is called
  const handleOpen = () => {console.log('Oops');setStatus(true)}
  return (
    <React.Fragment>
    <Mutation mutation={RemoveUserMutation}
    onError={(err: any) => {
      handleOpen()
    }}
    >
      {(RemoveUserMutation: any) => (
    <div>
      <PermanentDrawerLeft></PermanentDrawerLeft>
      <Formik
        initialValues={{ email: '' }}
        onSubmit={(values, actions) => {
          setTimeout(() => {
            alert(JSON.stringify(values, null, 2));
            actions.setSubmitting(false);
          }, 1000);
        }}
        validationSchema={schema}
      >
        {props => {
          const {
            values: { email },
            errors,
            touched,
            handleChange,
            isValid,
            setFieldTouched
          } = props;
          const change = (name: string, e: any) => {
            e.persist();
            handleChange(e);
            setFieldTouched(name, true, false);
            setState( prevState  => ({ ...prevState,   [name]: e.target.value }));  
          };
          return (
            <div className='main-content'>
              <form style={{ width: '100%' }}
               onSubmit={e => {e.preventDefault();
                submitForm(RemoveUserMutation)}}>
                <div>
                  <TextField
                    variant="outlined"
                    margin="normal"
                    id="email"
                    name="email"
                    helperText={touched.email ? errors.email : ""}
                    error={touched.email && Boolean(errors.email)}
                    label="Email"
                    value={email}
                    onChange={change.bind(null, "email")}
                  />
                  <br></br>
                  <Button
                  type="submit"
                  disabled={!isValid || !email}
                    style={{
                      background: '#6c74cc',
                      borderRadius: 3,
                      border: 0,
                      color: 'white',
                      height: 48,
                      padding: '0 30px',
                    }}
                  >
                    Remove User</Button>
                </div>
              </form>
            </div>
          )
        }}
      </Formik>
    </div>
      )}
     </Mutation>
     <Snackbar
          open={status}>
          Snackbar contents
        </Snackbar>
        </React.Fragment>
  );
}

来源:https://stackoverflow.com/questions/60508814/snackbar-not-opening-after-mutation

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!