有没有办法巧妙地将很多对象保持在反应状态

用户11416547

您好,我的问题是有一种方法可以在不创建许多变量的情况下将许多对象保持在反应状态。例如,我有一个包含产品的目录,我有 (onMouseEnter, onMouseLeave) 和一些逻辑,用于采用不同的 css 样式来实现淡入淡出效果,而其他逻辑则在布尔条件下使用一个变量保持在状态。当我需要 5 时,问题就来了.. 10.. 100.. 产品我需要为每个对象有很多变量。如果有人能说出什么方法是合适的。先感谢您。

import React from 'react';
import { Col, Row, Container } from 'react-bootstrap';
import Card from "react-bootstrap/Card";
import CardBody from "reactstrap/es/CardBody";
import CardTitle from "reactstrap/es/CardTitle";
import CardImg from "react-bootstrap/CardImg";
import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';
import { keyframes } from "styled-components";

import style from './Catalogue1.css';

class Catalogue extends React.Component {

    constructor(props) {
        super(props);
        this.state = {                   <-- here i need many state var's
            dropdownOpen: false,              
            visible: false,                          
            visible1: false,
            cardOn: false,
            cardOn1: false
        }

    }

    componentDidMount() {

    }

    enterMouse = e => {                            <-- need 4 functions 
                                                   for just two objects
        this.setState(prevState => ({
            dropdownOpen: !prevState.dropdownOpen,
            visible: true,
            cardOn: true

        }));
    }

    leaveMouse = e => {
        this.setState(prevState => ({
            dropdownOpen: !prevState.dropdownOpen,
            visible: false,
            cardOn: false
        }));
    }


    enterMouse1 = e => {                            
        this.setState(prevState => ({
            dropdownOpen: !prevState.dropdownOpen,
            visible1: true,
            cardOn1: true

        }));
    }

    leaveMouse1 = e => {
        this.setState(prevState => ({
            dropdownOpen: !prevState.dropdownOpen,
            visible1: false,
            cardOn1: false
        }));
    }

    render() {
        const { filteredItems } = this.state;        
        return (
            <Container className={style.container}>
                <Row>
                    <Col>
                        <div className={style.div1}>         
                            <Card className={this.state.cardOn ? style.cardOn : style.cardOff}  style={{ width: '13rem'}}  onMouseEnter={this.enterMouse} onMouseLeave={this.leaveMouse}>
                                <CardImg variant="top" src="https://i.ibb.co/MDHYTJy/11482459963422.jpg" />
                                <CardBody className={style.cardText}>
                                    <CardTitle>Смартфон GSM XIAOMI MI 8 LITE</CardTitle>
                                    <div className={this.state.visible? style.fadeIn : style.fadeDefaultState} style={{ width: '13rem'}}>
                                        <p>
                                            * foo <br />
                                            * bar
                                        </p>
                                    </div>
                                </CardBody>
                            </Card>
                            <Card className={this.state.cardOn1 ? style.cardOn1 : style.cardOff1}  style={{ width: '13rem'}}  onMouseEnter={this.enterMouse1} onMouseLeave={this.leaveMouse1}>
                                <CardImg variant="top" src="https://i.ibb.co/MDHYTJy/11482459963422.jpg" />
                                <CardBody className={style.cardText}>
                                    <CardTitle>Смартфон GSM XIAOMI MI 8 LITE</CardTitle>
                                    <div className={this.state.visible1? style.fadeIn : style.fadeDefaultState} style={{ width: '13rem'}}>
                                        <p>
                                            * foo <br />
                                            * bar
                                        </p>
                                    </div>
                                </CardBody>
                            </Card>
                        </div>
                    </Col>
                </Row>


            </Container>
        );
    }
}

export default Catalogue

很酷的家伙

是的,保存数组值而不是为您的对象定义单个键是有意义的。我看到你正在尝试用卡片做一些事情,所以这应该特别相关。

考虑以下代码:

class Catalogue extends React.Component{
    constructor(props) {
    super(props);
       this.state = {              
          dropdownOpen: false,              
          cards: [{id: 1, name: "Jack", visible: false}, {id: 2, name: "Queen", visible: false}]
       }
    }

    toggleCard = (cardId) => {
       const cards = this.state.cards
       //flip card, update state
       const updatedCards = cards.map((card, index, array) => {
           if(card.id == cardId){
               return {
                  ...card,
                  visible: !array[index].visible 
               }
           } else {
               return {
                  ...card 
               }
           }
       })
       this.setState({
           cards: updatedCards
       })
    }
    render(){
       const cards = this.state.cards
       return(
           cards.map((card) => {
               return <div onClick={() => this.toggleCard(card.id)}>{card.name}</div> 
           })

       )
    }
}

因此,拥有这样的东西可以让您将所有卡片集中在一个组件中。这完全取决于您如何设置卡片阵列,拥有 ID 会让您的生活变得更加轻松。然后您需要计划您的事件处理程序如何通过使用这些 id 来更新所需的卡片

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在每个onClick事件发生反应后,有没有办法刷新状态?

来自分类Dev

有没有办法让Okular高亮工具永久保持打开状态?

来自分类Dev

使用WatchKit,有没有办法让屏幕保持打开状态?

来自分类Dev

打开新程序时,有没有办法使当前窗口保持活动状态?

来自分类Dev

页面刷新后,有没有办法让jQuery保持选中状态?

来自分类Dev

有没有办法保存反应角色数据?

来自分类Dev

有没有办法“懒洋洋地”阅读?

来自分类Dev

有没有办法为本体中的对象属性定义值或状态?

来自分类常见问题

有没有办法通过熊猫轻松地将值与行组合?

来自分类Dev

有没有办法通过熊猫轻松地将值与行组合?

来自分类Dev

有没有办法将状态传递给作为道具传递的组件?

来自分类Dev

有没有办法将状态文本放入Windows任务栏通知区域?

来自分类Dev

有没有办法将文件存储在 React 状态?

来自分类Dev

有没有办法清除JavaScript中的对象?

来自分类Dev

有没有办法覆盖`{}`对象?

来自分类Dev

有没有办法让numpy矩阵存储对象?

来自分类Dev

有没有办法从JSON对象移除图层?

来自分类Dev

有没有办法使地图对象重复?

来自分类Dev

有没有办法从方法中调用对象?

来自分类Dev

有没有办法使用OpenScad拉伸对象

来自分类Dev

有没有办法调整Cowplot对象的主题?

来自分类Dev

有没有办法在Dart中克隆对象?

来自分类Dev

有没有办法在Dart中克隆对象?

来自分类Dev

有没有办法动态导入Python对象?

来自分类Dev

有没有办法在Javascript中组合对象

来自分类Dev

有没有办法将事件绑定到javascript中的常规对象?

来自分类Dev

有没有办法将javascript对象查看为JSON?

来自分类Dev

有没有办法将POSIXct对象从C返回到R?

来自分类Dev

有没有办法将字符串数组转换为对象集合?

Related 相关文章

  1. 1

    在每个onClick事件发生反应后,有没有办法刷新状态?

  2. 2

    有没有办法让Okular高亮工具永久保持打开状态?

  3. 3

    使用WatchKit,有没有办法让屏幕保持打开状态?

  4. 4

    打开新程序时,有没有办法使当前窗口保持活动状态?

  5. 5

    页面刷新后,有没有办法让jQuery保持选中状态?

  6. 6

    有没有办法保存反应角色数据?

  7. 7

    有没有办法“懒洋洋地”阅读?

  8. 8

    有没有办法为本体中的对象属性定义值或状态?

  9. 9

    有没有办法通过熊猫轻松地将值与行组合?

  10. 10

    有没有办法通过熊猫轻松地将值与行组合?

  11. 11

    有没有办法将状态传递给作为道具传递的组件?

  12. 12

    有没有办法将状态文本放入Windows任务栏通知区域?

  13. 13

    有没有办法将文件存储在 React 状态?

  14. 14

    有没有办法清除JavaScript中的对象?

  15. 15

    有没有办法覆盖`{}`对象?

  16. 16

    有没有办法让numpy矩阵存储对象?

  17. 17

    有没有办法从JSON对象移除图层?

  18. 18

    有没有办法使地图对象重复?

  19. 19

    有没有办法从方法中调用对象?

  20. 20

    有没有办法使用OpenScad拉伸对象

  21. 21

    有没有办法调整Cowplot对象的主题?

  22. 22

    有没有办法在Dart中克隆对象?

  23. 23

    有没有办法在Dart中克隆对象?

  24. 24

    有没有办法动态导入Python对象?

  25. 25

    有没有办法在Javascript中组合对象

  26. 26

    有没有办法将事件绑定到javascript中的常规对象?

  27. 27

    有没有办法将javascript对象查看为JSON?

  28. 28

    有没有办法将POSIXct对象从C返回到R?

  29. 29

    有没有办法将字符串数组转换为对象集合?

热门标签

归档