javascript - 如何在 react/material UI 中使用 window.scrollTo?

标签 javascript reactjs material-ui formik

我有一个简单的功能组件。它只是一个带有错误消息的有条件呈现的警报面板。表单相当长,因此如果出现错误,面板会呈现,但用户已滚动到警报面板离开屏幕的位置。每当组件呈现错误时,我希望页面滚动到顶部。这应该是 window.scrollTo(0,0),但我无法让它工作。

我知道正在进行 window.scrollTo 调用,因为“SCROLLING”消息出现在控制台中。但是,实际上并没有发生滚动;窗口保持滚动到表单底部。 我尝试了其他答案中的一些建议,但无法正常工作;任何帮助,将不胜感激。这是我的组件的简化版本:

const OrderForm = ({
  customer,
  handleSubmit,
  newCustomer,
  omsAccountJwt,
  showAccountSearch,
  storeCode
}) => {
  ...
  const orderState = useSelector(state => state.order);

  useEffect(() => {
    if (orderState.error) {
      console.log('SCROLLING');
      window.scrollTo(0, 0);
    }
  }, [orderState.error]);

  ...

  return (
  ...
      {orderState.error !== null && (
        <AlertPanel
          type="error"
          text={`There was a problem processing the order:  ${orderState.error}`}
        />
      )}
      <Formik
        initialValues={{
          selectedShippingAddress: defaultShippingIndex.toString(),
          selectedPaymentMethod: defaultPaymentIndex.toString(),
          storeCode
        }}
        onSubmit={(values, actions) => handleSubmit(order, values, actions)}
        render={renderForm}
      />
    ...
    )
}

最佳答案

这可能与您的状态结构或您在 handleSubmit 中更新状态的方式有关。看看这个工作代码和框,看看它是否有帮助

https://codesandbox.io/s/bitter-platform-kov7s

const Scroller = props => {
  const [orderState, setOrderState] = React.useState({ error: false });
  console.log({ orderState });

  React.useEffect(() => {
    if (orderState.error) {
      console.log("SCROLLING");
      window.scrollTo(0, 0);
    }
  }, [orderState.error]);

  function handleClick() {
    setOrderState({ error: true });
  }

  return <button onClick={handleClick}>Scroll up</button>;
};

关于javascript - 如何在 react/material UI 中使用 window.scrollTo?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59620417/

相关文章:

reactjs - Material-UI + TypeScript 给出 ReferenceError : global is not defined

JavaScript 按钮不起作用

javascript - 如果 (x) ... 给出引用错误 : x is not defined

javascript - CSS 变换还是缩放?挂载动画

javascript - 为什么我的去抖函数返回未定义的值?

javascript - 如何使用reactjs动态填充 Bootstrap 网格?

javascript - 如何提高我的 Ajax Like 按钮速度(Jquery + PHP)

reactjs - React + Material-UI + Typescript : Inherit props from button to add different variants

reactjs - 验证DOM嵌套(...): <button> cannot appear as a descendant of <button>

reactjs - Material-ui BottomNavigation 未填充宽度