Skip to content

Commit 727e340

Browse files
Got rid of ReactDOM.findDOMNode (#1406)
1 parent 93c37bd commit 727e340

File tree

3 files changed

+16
-9
lines changed

3 files changed

+16
-9
lines changed

src/inner-slider.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
"use strict";
22

33
import React from "react";
4-
import ReactDOM from "react-dom";
54
import initialState from "./initial-state";
65
import debounce from "lodash.debounce";
76
import classnames from "classnames";
@@ -195,7 +194,9 @@ export class InnerSlider extends React.Component {
195194
this.debouncedResize();
196195
};
197196
resizeWindow = (setTrackStyle = true) => {
198-
if (!ReactDOM.findDOMNode(this.track)) return;
197+
const isTrackMounted = Boolean(this.track && this.track.node);
198+
// prevent warning: setting state on unmounted component (server side rendering)
199+
if (!isTrackMounted) return;
199200
let spec = {
200201
listRef: this.list,
201202
trackRef: this.track,

src/track.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,12 +197,17 @@ var renderSlides = function(spec) {
197197
};
198198

199199
export class Track extends React.PureComponent {
200+
node = null;
201+
202+
handleRef = ref => { this.node = ref };
203+
200204
render() {
201205
const slides = renderSlides(this.props);
202206
const { onMouseEnter, onMouseOver, onMouseLeave } = this.props;
203207
const mouseEvents = { onMouseEnter, onMouseOver, onMouseLeave };
204208
return (
205209
<div
210+
ref={this.handleRef}
206211
className="slick-track"
207212
style={this.props.trackStyle}
208213
{...mouseEvents}

src/utils/innerSliderUtils.js

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import React from "react";
2-
import ReactDOM from "react-dom";
32

43
export const getOnDemandLazySlides = spec => {
54
let onDemandSlides = [];
@@ -99,8 +98,10 @@ export const extractObject = (spec, keys) => {
9998
export const initializedState = spec => {
10099
// spec also contains listRef, trackRef
101100
let slideCount = React.Children.count(spec.children);
102-
let listWidth = Math.ceil(getWidth(ReactDOM.findDOMNode(spec.listRef)));
103-
let trackWidth = Math.ceil(getWidth(ReactDOM.findDOMNode(spec.trackRef)));
101+
const listNode = spec.listRef;
102+
let listWidth = Math.ceil(getWidth(listNode));
103+
const trackNode = spec.trackRef && spec.trackRef.node;
104+
let trackWidth = Math.ceil(getWidth(trackNode));
104105
let slideWidth;
105106
if (!spec.vertical) {
106107
let centerPaddingAdj = spec.centerMode && parseInt(spec.centerPadding) * 2;
@@ -115,9 +116,9 @@ export const initializedState = spec => {
115116
slideWidth = listWidth;
116117
}
117118
let slideHeight =
118-
ReactDOM.findDOMNode(spec.listRef) &&
119+
listNode &&
119120
getHeight(
120-
ReactDOM.findDOMNode(spec.listRef).querySelector('[data-index="0"]')
121+
listNode.querySelector('[data-index="0"]')
121122
);
122123
let listHeight = slideHeight * spec.slidesToShow;
123124
let currentSlide =
@@ -515,7 +516,7 @@ export const getSlideCount = spec => {
515516
: 0;
516517
if (spec.swipeToSlide) {
517518
let swipedSlide;
518-
const slickList = ReactDOM.findDOMNode(spec.listRef);
519+
const slickList = spec.listRef;
519520
const slides = slickList.querySelectorAll(".slick-slide");
520521
Array.from(slides).every(slide => {
521522
if (!spec.vertical) {
@@ -721,7 +722,7 @@ export const getTrackLeft = spec => {
721722

722723
if (variableWidth === true) {
723724
var targetSlideIndex;
724-
let trackElem = ReactDOM.findDOMNode(trackRef);
725+
const trackElem = trackRef && trackRef.node;
725726
targetSlideIndex = slideIndex + getPreClones(spec);
726727
targetSlide = trackElem && trackElem.childNodes[targetSlideIndex];
727728
targetLeft = targetSlide ? targetSlide.offsetLeft * -1 : 0;

0 commit comments

Comments
 (0)