首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >递增和递减反应钩子

递增和递减反应钩子
EN

Stack Overflow用户
提问于 2020-12-15 04:47:48
回答 1查看 355关注 0票数 0

递增和递减工作,但当我点击递增,然后我想要递减,它仍然递增1倍,然后正常工作。我猜这是与ASYNC渲染相关的问题。如何解决这个问题?在其他方面,问题是相同的。我得到了两个文件。Worker list屏幕,另一个是渲染的底部栏。

Worker list screen

代码语言:javascript
运行
复制
import {
    RefreshControl,
    View,
    StyleSheet,
    ScrollView,
    TouchableOpacity,
    Image,
} from 'react-native';
import { List, Divider, Text } from 'react-native-paper';

import { request } from '../backend/backend';
import { appDefaultTheme } from '../theme/paperTheme';
import { boldCatamaran } from '../theme/paperTheme';
import { colors } from '../theme/colors';
import { translate } from '../languages/translator';
import { config as globalConfig } from '../backend/config';
import { LoadingComponent } from '../components/LoadingComponent';
import { BottomBar } from '../components/BottomBar';
import { TopBar } from '../components/TopBar';
import moment from 'moment';
import Avatar from '../assets/images/default_image.svg';

export const WorkersListScreen = ({ route, navigation }) => {
    let array = [];

    const { projectName, projectID } = route.params;
    const [loading, setLoading] = useState(true);
    const [refreshing, setRefreshing] = useState(false);
    const [workersData, setWorkersData] = useState([]);
    const [timeData, setTimeData] = useState([]);
    const [currentWeek, setCurrentWeek] = useState(moment().week());

    const [startOfWeek, setStartOfWeek] = useState(moment().startOf('isoWeek'));

    const [endOfWeek, setEndOfWeek] = useState(moment().endOf('isoWeek'));

    useEffect(() => {
        
    }, []);
    

    

    const weekIncrement = () => {
        console.log(timeData);
        setCurrentWeek(currentWeek + 1);
        setStartOfWeek(moment().week(currentWeek).startOf('isoWeek'));
        setEndOfWeek(moment().week(currentWeek).endOf('isoWeek'));
        // console.log(timeData[0].attributes);
    };

    const weekReduction = () => {
        setCurrentWeek(currentWeek - 1);
        setStartOfWeek(moment().week(currentWeek).startOf('isoWeek'));
        setEndOfWeek(moment().week(currentWeek).endOf('isoWeek'));
    };

    

    return (
        <View>
            <BottomBar
                loading={loading}
                startOfWeek={startOfWeek.format('DD.MM.YYYY')}
                endOfWeek={endOfWeek.format('DD.MM.YYYY')}
                onClickIncrement={() => weekIncrement()}
                onClickReduce={() => weekReduction()}
            />
        </View>
    );
};



export default WorkersListScreen;

Bottom bar

代码语言:javascript
运行
复制
import React from 'react';
import { TouchableOpacity, StyleSheet, View } from 'react-native';
import Icon from 'react-native-vector-icons/MaterialIcons';
import { Appbar, Button, Text } from 'react-native-paper';
import { colors } from '../theme/colors';
import { useNavigation } from '@react-navigation/native';
import { color } from 'react-native-reanimated';

export const BottomBar = (props) => {
    const navigation = useNavigation();
    return (
        <Appbar style={styles.bottomBarContainer}>
            <Appbar.Action
                style={styles.arrowButton}
                onPress={() => navigation.goBack()}
                icon="arrow-left"
                disabled={props.loading && true}
            />
            <Button mode="text" onPress={props.onClickReduce}>
                <Icon name="chevron-left" size={24} color="#fff" />
            </Button>
            <View>
                <Text style={{ color: colors.white, fontSize: 12 }}>
                    {props.startOfWeek}
                </Text>
                <Text style={{ color: colors.white, fontSize: 12 }}>
                    {props.endOfWeek}
                </Text>
            </View>
            <Button mode="text" onPress={props.onClickIncrement}>
                <Icon name="chevron-right" size={24} color="#fff" />
            </Button>
            <TouchableOpacity
                style={styles.timeButton}**strong text**
                disabled={props.loading && true}
            >
                <Icon name="more-time" size={24} color={colors.white} />
            </TouchableOpacity>
        </Appbar>
    );
};
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-15 05:05:17

不确定增量的哪一部分不能像您希望的那样工作。如果它与显示startOfWeekendOfWeek相关,那么立即传递currentWeek + 1而不是currentWeek可能会解决您的问题。

代码语言:javascript
运行
复制
const weekIncrement = () => {
    console.log(timeData);
    setCurrentWeek(currentWeek + 1);
    setStartOfWeek(moment().week(currentWeek + 1).startOf('isoWeek'));
    setEndOfWeek(moment().week(currentWeek + 1).endOf('isoWeek'));
    // console.log(timeData[0].attributes);
};

const weekReduction = () => {
    setCurrentWeek(currentWeek - 1);
    setStartOfWeek(moment().week(currentWeek - 1).startOf('isoWeek'));
    setEndOfWeek(moment().week(currentWeek - 1).endOf('isoWeek'));
};

更详细地说,如果在执行setCurrentWeek(currentWeek + 1)之后currentWeek等于51,那么下一行仍然有相同的值currentWeek,它没有立即增加。默认情况下,setState是异步的,只有在下次调用此函数后,才会有更新值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65296285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档