Skip to content

Commit 99d86f0

Browse files
committed
Merge pull request #1442 from andreytrofimov/issue1406
Got rid of ReactDOM.findDOMNode (#1406)
2 parents 1872717 + 727e340 commit 99d86f0

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";
@@ -192,7 +191,9 @@ export class InnerSlider extends React.Component {
192191
this.debouncedResize();
193192
};
194193
resizeWindow = (setTrackStyle = true) => {
195-
if (!ReactDOM.findDOMNode(this.track)) return;
194+
const isTrackMounted = Boolean(this.track && this.track.node);
195+
// prevent warning: setting state on unmounted component (server side rendering)
196+
if (!isTrackMounted) return;
196197
let spec = {
197198
listRef: this.list,
198199
trackRef: this.track,

src/track.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,12 +187,17 @@ const renderSlides = spec => {
187187
};
188188

189189
export class Track extends React.PureComponent {
190+
node = null;
191+
192+
handleRef = ref => { this.node = ref };
193+
190194
render() {
191195
const slides = renderSlides(this.props);
192196
const { onMouseEnter, onMouseOver, onMouseLeave } = this.props;
193197
const mouseEvents = { onMouseEnter, onMouseOver, onMouseLeave };
194198
return (
195199
<div
200+
ref={this.handleRef}
196201
className="slick-track"
197202
style={this.props.trackStyle}
198203
{...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 =
@@ -513,7 +514,7 @@ export const getSlideCount = spec => {
513514
: 0;
514515
if (spec.swipeToSlide) {
515516
let swipedSlide;
516-
const slickList = ReactDOM.findDOMNode(spec.listRef);
517+
const slickList = spec.listRef;
517518
const slides = slickList.querySelectorAll(".slick-slide");
518519
Array.from(slides).every(slide => {
519520
if (!spec.vertical) {
@@ -719,7 +720,7 @@ export const getTrackLeft = spec => {
719720

720721
if (variableWidth === true) {
721722
var targetSlideIndex;
722-
let trackElem = ReactDOM.findDOMNode(trackRef);
723+
const trackElem = trackRef && trackRef.node;
723724
targetSlideIndex = slideIndex + getPreClones(spec);
724725
targetSlide = trackElem && trackElem.childNodes[targetSlideIndex];
725726
targetLeft = targetSlide ? targetSlide.offsetLeft * -1 : 0;

0 commit comments

Comments
 (0)