Skip to content

Commit

Permalink
Got rid of ReactDOM.findDOMNode (akiran#1406)
Browse files Browse the repository at this point in the history
  • Loading branch information
andreytrofimov committed Dec 2, 2018
1 parent 93c37bd commit 727e340
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 9 deletions.
5 changes: 3 additions & 2 deletions src/inner-slider.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
"use strict";

import React from "react";
import ReactDOM from "react-dom";
import initialState from "./initial-state";
import debounce from "lodash.debounce";
import classnames from "classnames";
Expand Down Expand Up @@ -195,7 +194,9 @@ export class InnerSlider extends React.Component {
this.debouncedResize();
};
resizeWindow = (setTrackStyle = true) => {
if (!ReactDOM.findDOMNode(this.track)) return;
const isTrackMounted = Boolean(this.track && this.track.node);
// prevent warning: setting state on unmounted component (server side rendering)
if (!isTrackMounted) return;
let spec = {
listRef: this.list,
trackRef: this.track,
Expand Down
5 changes: 5 additions & 0 deletions src/track.js
Original file line number Diff line number Diff line change
Expand Up @@ -197,12 +197,17 @@ var renderSlides = function(spec) {
};

export class Track extends React.PureComponent {
node = null;

handleRef = ref => { this.node = ref };

render() {
const slides = renderSlides(this.props);
const { onMouseEnter, onMouseOver, onMouseLeave } = this.props;
const mouseEvents = { onMouseEnter, onMouseOver, onMouseLeave };
return (
<div
ref={this.handleRef}
className="slick-track"
style={this.props.trackStyle}
{...mouseEvents}
Expand Down
15 changes: 8 additions & 7 deletions src/utils/innerSliderUtils.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import React from "react";
import ReactDOM from "react-dom";

export const getOnDemandLazySlides = spec => {
let onDemandSlides = [];
Expand Down Expand Up @@ -99,8 +98,10 @@ export const extractObject = (spec, keys) => {
export const initializedState = spec => {
// spec also contains listRef, trackRef
let slideCount = React.Children.count(spec.children);
let listWidth = Math.ceil(getWidth(ReactDOM.findDOMNode(spec.listRef)));
let trackWidth = Math.ceil(getWidth(ReactDOM.findDOMNode(spec.trackRef)));
const listNode = spec.listRef;
let listWidth = Math.ceil(getWidth(listNode));
const trackNode = spec.trackRef && spec.trackRef.node;
let trackWidth = Math.ceil(getWidth(trackNode));
let slideWidth;
if (!spec.vertical) {
let centerPaddingAdj = spec.centerMode && parseInt(spec.centerPadding) * 2;
Expand All @@ -115,9 +116,9 @@ export const initializedState = spec => {
slideWidth = listWidth;
}
let slideHeight =
ReactDOM.findDOMNode(spec.listRef) &&
listNode &&
getHeight(
ReactDOM.findDOMNode(spec.listRef).querySelector('[data-index="0"]')
listNode.querySelector('[data-index="0"]')
);
let listHeight = slideHeight * spec.slidesToShow;
let currentSlide =
Expand Down Expand Up @@ -515,7 +516,7 @@ export const getSlideCount = spec => {
: 0;
if (spec.swipeToSlide) {
let swipedSlide;
const slickList = ReactDOM.findDOMNode(spec.listRef);
const slickList = spec.listRef;
const slides = slickList.querySelectorAll(".slick-slide");
Array.from(slides).every(slide => {
if (!spec.vertical) {
Expand Down Expand Up @@ -721,7 +722,7 @@ export const getTrackLeft = spec => {

if (variableWidth === true) {
var targetSlideIndex;
let trackElem = ReactDOM.findDOMNode(trackRef);
const trackElem = trackRef && trackRef.node;
targetSlideIndex = slideIndex + getPreClones(spec);
targetSlide = trackElem && trackElem.childNodes[targetSlideIndex];
targetLeft = targetSlide ? targetSlide.offsetLeft * -1 : 0;
Expand Down

0 comments on commit 727e340

Please sign in to comment.