javascript - React-Slick 不适用于 React 中的首次渲染

标签 javascript reactjs ecmascript-6 react-slick

我试图在应用程序中添加 React-Slick 但不知何故我失败了,实际上我在应用程序中添加待办事项,然后在 slider 中显示待办事项列表。当我存储一些待办事项时,我从服务器获取数据并在第一次尝试时在 slider 中显示它现在显示,但当我再次尝试时它显示。我将分享我的代码,请您检查并纠正我的问题。

代码

   let settings = {
      dots: true,
      infinite: true,
      speed: 500,
      slidesToShow: 1,
      slidesToScroll: 1,
      className: "slides",
      adaptiveHeight: true
    };

 <Slider {...settings}>
              {this.props.fetchTodos
                ? this.props.fetchTodos.rows.map(item => (
                    <div
                      className={`${
                        item.priority === "P1"
                          ? "red-data"
                          : item.priority === "P2"
                          ? "yello-data"
                          : item.priority === "P3"
                          ? "green-data"
                          : ""
                      } mb-4 `}
                    >
                      <div>{item.title}</div>
                      <div>{item.description}</div>
                      <div className="mt-2">
                        <TodoListModal
                          color={`${
                            item.priority === "P1"
                              ? "light"
                              : item.priority === "P2"
                              ? "light"
                              : item.priority === "P3"
                              ? "light"
                              : ""
                          }`}
                          title={item.title}
                          description={item.description}
                          priority={item.priority}
                          todoId={item.id}
                        />
                      </div>
                    </div>
                  ))
                : ""}
            </Slider>

最佳答案

我已经设置了code sandboxreact-slick 适用于第一次渲染。您只会看到控制台输出 rendering.. 一次。

应用程序

import "./styles.css";
import TodoListModal from "./TodoListModal";

class App extends Component {
  state = {
    settings: {
      dots: true,
      infinite: true,
      speed: 500,
      slidesToShow: 1,
      slidesToScroll: 1,
      className: "slides",
      adaptiveHeight: true
    }
  };

  render() {
    const { settings } = this.state;
    console.log("rendering..");

    return (
      <Slider {...settings}>
        {this.props.fetchTodos
          ? this.props.fetchTodos.rows.map(item => (
              <div
                className={`${
                  item.priority === "P1"
                    ? "red-data"
                    : item.priority === "P2"
                    ? "yello-data"
                    : item.priority === "P3"
                    ? "green-data"
                    : ""
                } mb-4 `}
              >
                <div>{item.title}</div>
                <div>{item.description}</div>
                <div className="mt-2">
                  <TodoListModal
                    color={`${
                      item.priority === "P1"
                        ? "light"
                        : item.priority === "P2"
                        ? "light"
                        : item.priority === "P3"
                        ? "light"
                        : ""
                    }`}
                    title={item.title}
                    description={item.description}
                    priority={item.priority}
                    todoId={item.id}
                  />
                </div>
              </div>
            ))
          : ""}
      </Slider>
    );
  }
}

App.defaultProps = {
  fetchTodos: {
    rows: [
      {
        id: "01",
        priority: "P1",
        title: "title P1",
        description: "description P1"
      },
      {
        id: "02",
        priority: "P2",
        title: "title P2",
        description: "description P2"
      },
      {
        id: "03",
        priority: "P3",
        title: "title P3",
        description: "description P3"
      }
    ]
  }
};

TodoListModal

const TodoListModal = ({ color, title, description, priority, todoId }) => {
  return (
    <div
      style={{
        background: "#bbc",
        border: "5px solid purple",
        margin: "10px",
        padding: "10px"
      }}
    >
      <h2>color: {color}</h2>
      <h4>title: {title}</h4>
      <h4>description: {description}</h4>
      <h4>priority: {priority}</h4>
      <h4>todoId: {todoId}</h4>
    </div>
  );
};

Styles.css

Slider > div {
  background: #bbc;
  width: 400px;
  height: 150px;
}

.red-data {
  background: red;
}
.yello-data {
  background: yellow;
}

.green-data {
  background: green;
}

关于javascript - React-Slick 不适用于 React 中的首次渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58640940/

相关文章:

javascript - 灰尘模板包含多次

javascript - jQuery 使用 .animate 滚动到顶部 - 先跳到底部?

javascript - 我应该在哪里存储我的 React 可重用组件?

typescript - ES6 与 TypeScript 中的泛型类型混合

javascript - 离线时在 Progressive Web App 中处理获取请求

javascript - 如何在单元测试中取消引导 Angular JS 应用程序?

javascript - 我可以将哈巴狗(ex-jade)与 react 框架一起使用吗?

javascript - 在自定义 Hook 和组件中使用 useEffect 有什么区别

reactjs - 将 OnTokenValidated 添加到 API 时,向 API 后端发送 Azure token 不断返回 401 Unauthorzied 错误

javascript - 如何在 ES6 中获取 Set 的第一个元素(EcmaScript 2015)