react-grid-layout 寬度超出

問題

最近在使用react-grid-layout 做可拖動布局霎褐,偶然發(fā)現(xiàn)陋葡,當(dāng)我登陸完之后右莱,跳到首頁會發(fā)生寬度超出,本來設(shè)定好的都是一屏的氏堤;
cb086782bc5b38ba1aab3ed30f2d4ed.png

出現(xiàn)了滾動條沙绝;

原因

經(jīng)排查因為我用了內(nèi)置的響應(yīng)式 WidthProvider;他添加了一個監(jiān)聽頁面變化的方法 window.addEventListener("resize", this.onWindowResize);這個方法會獲取當(dāng)前dom的寬度鼠锈;

因為項目是layout包裹content闪檬,當(dāng)layout和當(dāng)前dom都重載時,layout還未render完畢時购笆,當(dāng)前dom的this.elementRef.current獲取的寬度會是整個屏幕粗悯;當(dāng)layout加載完畢,react-grid-layout會超出原本設(shè)定的100%由桌;

解決

我自己重寫了他的WidthProvider方法为黎;利用宏任務(wù) setTimeout 延遲獲取當(dāng)前dom的寬度,以此解決 react-grid-layout 寬度超出問題行您!

WidthProvider 核心代碼

    onWindowResize = () => {
      if (!this.mounted) return;
      let _ = this;
      let node = "";
      setTimeout(() => {
        node = this.elementRef.current;
        if (node instanceof HTMLElement && node.offsetWidth) {
          _.setState({ width: node.offsetWidth });
        }
      }, 0);
    };

WidthProvider 全部代碼

import * as React from "react";
import clsx from "clsx";

const layoutClassName = "react-grid-layout";

export default function WidthProvideRGL(ComposedComponent) {
  return class WidthProvider extends React.Component {
    static defaultProps = {
      measureBeforeMount: false,
    };

    // static propTypes = {
    //   measureBeforeMount: PropTypes.bool,
    // };

    state = {
      width: 1280,
    };

    elementRef = React.createRef();
    mounted = false;

    componentDidMount() {
      this.mounted = true;
      window.addEventListener("resize", this.onWindowResize);
      // Call to properly set the breakpoint and resize the elements.
      // Note that if you're doing a full-width element, this can get a little wonky if a scrollbar
      // appears because of the grid. In that case, fire your own resize event, or set `overflow: scroll` on your body.
      this.onWindowResize();
    }

    componentWillUnmount() {
      window.removeEventListener("resize", this.onWindowResize);
    }

    onWindowResize = () => {
      if (!this.mounted) return;
      let _ = this;
      let node = "";
      setTimeout(() => {
        node = this.elementRef.current;
        if (node instanceof HTMLElement && node.offsetWidth) {
          _.setState({ width: node.offsetWidth });
        }
      }, 0);
    };

    render() {
      const { measureBeforeMount, ...rest } = this.props;
      if (measureBeforeMount && !this.mounted) {
        return (
          <div
            className={clsx(this.props.className, layoutClassName)}
            style={this.props.style}
            ref={this.elementRef}
          />
        );
      }

      return (
        <ComposedComponent
          innerRef={this.elementRef}
          {...rest}
          {...this.state}
        />
      );
    }
  };
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市剪廉,隨后出現(xiàn)的幾起案子娃循,更是在濱河造成了極大的恐慌,老刑警劉巖斗蒋,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捌斧,死亡現(xiàn)場離奇詭異,居然都是意外死亡泉沾,警方通過查閱死者的電腦和手機(jī)捞蚂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來跷究,“玉大人姓迅,你說我怎么就攤上這事。” “怎么了丁存?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵肩杈,是天一觀的道長。 經(jīng)常有香客問我解寝,道長扩然,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任聋伦,我火速辦了婚禮夫偶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘觉增。我一直安慰自己兵拢,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布抑片。 她就那樣靜靜地躺著卵佛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪敞斋。 梳的紋絲不亂的頭發(fā)上截汪,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天,我揣著相機(jī)與錄音植捎,去河邊找鬼衙解。 笑死,一個胖子當(dāng)著我的面吹牛焰枢,可吹牛的內(nèi)容都是我干的蚓峦。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼济锄,長吁一口氣:“原來是場噩夢啊……” “哼暑椰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起荐绝,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤一汽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后低滩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體召夹,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年恕沫,在試婚紗的時候發(fā)現(xiàn)自己被綠了监憎。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡婶溯,死狀恐怖鲸阔,靈堂內(nèi)的尸體忽然破棺而出偷霉,到底是詐尸還是另有隱情,我是刑警寧澤隶债,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布腾它,位于F島的核電站,受9級特大地震影響死讹,放射性物質(zhì)發(fā)生泄漏瞒滴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一赞警、第九天 我趴在偏房一處隱蔽的房頂上張望妓忍。 院中可真熱鬧,春花似錦愧旦、人聲如沸世剖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽旁瘫。三九已至,卻和暖如春琼蚯,著一層夾襖步出監(jiān)牢的瞬間酬凳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工遭庶, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留宁仔,地道東北人。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓峦睡,卻偏偏與公主長得像翎苫,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子榨了,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容