Reactjs flex和scrollview的两种不同且错误的结果

Reactjs flex和scrollview的两种不同且错误的结果,reactjs,react-native,Reactjs,React Native,我的scrollview和在另一个组件中渲染的视图有问题 这是我的代码: import React,{Component} from 'react'; import {View, Dimensions, Text, TouchableOpacity, StyleSheet,Button } from 'react-native'; import Icon from 'react-native-vector-icons/FontAwesome'; import {Transition,Transi

我的scrollview和在另一个组件中渲染的视图有问题

这是我的代码:

import React,{Component} from 'react';
import {View, Dimensions, Text, TouchableOpacity, StyleSheet,Button } from 'react-native';
import Icon from 'react-native-vector-icons/FontAwesome';
import {Transition,Transitioning} from "react-native-reanimated";

const transition = (
    <Transition.Together>
        <Transition.In type="fade" durationMs={200} />
        <Transition.Change/>
        <Transition.Out type="fade" durationMs={200}/>
    </Transition.Together>
);

export default class RestaurantMenu extends React.Component{

    constructor(props) {
        super(props);
        this.ref = React.createRef();
        this.state={
            cartItemsAmount: [],
            screenWidth: (Dimensions.get('window').width-10),
            expandOption: []
        }
    }

    returnAmount=(amount)=>{
        if(typeof amount==='undefined'){
            return 0
        }else{
            return amount
        }
    };

    renderMenu = (menu)=>{
        return menu.map((item,index)=>{
            let cartItemArray=this.state.cartItemsAmount;
            let dishNumber = index + 1;
            let windowSize =  '13%';
            if(this.state.expandOption[index]===true){
                windowSize = '30%';
            }
            console.log(this.state.expandOption)
            return(
                <Transitioning.View
                    style={[styles.boxStyle,{width:this.state.screenWidth},{height:windowSize}]}
                    key={index}
                >
                    <Text style={{fontSize:20}}> {dishNumber} {item.name} {'\n\n'}   {item.price}0€ {'\n'}  </Text>

                    <TouchableOpacity
                    style={{position:'absolute',bottom:'2%',left:'2%'}}
                    onPress={()=>this.changeExpandOption(index)}
                    >
                        <Text>Details</Text>
                    </TouchableOpacity>

                    <TouchableOpacity
                        onPress={()=>{
                            if(typeof cartItemArray[index]==='undefined'){
                                cartItemArray[index]=1;
                            }else{
                                cartItemArray[index]++;
                            };
                            this.setState({cartItemsAmount:cartItemArray});
                        }}
                        style={{position:'absolute',left:'75%',top:'55%'}}
                    >
                        <Icon name='plus' size={25}/>
                    </TouchableOpacity>

                    <Text
                        style={{fontSize:25,position:'absolute',left:'67%',top:'52%',fontWeight:'bold'}}
                    >
                        {this.returnAmount(cartItemArray[index])}
                    </Text>

                    <TouchableOpacity
                    onPress={()=>{
                        if(typeof cartItemArray[index]==='undefined'){
                            cartItemArray[index]=0;
                        }
                        if(cartItemArray[index]===0){
                            cartItemArray[index]=0;
                        }else{
                            cartItemArray[index]--
                        };
                        this.setState({cartItemAmount:cartItemArray});
                    }}
                    style={{position:'absolute',left:'60%',top:'55%'}}
                    >
                        <Icon name='minus' size={25}/>
                    </TouchableOpacity>

                    <TouchableOpacity
                        onPress={()=>{
                        if(cartItemArray[index]!==0){
                        this.props.onPress(item,index,item.name,item.id,cartItemArray[index],item.price);
                        cartItemArray[index]=0;
                        this.setState({cartItemAmount:cartItemArray});
                        }
                    }}
                        style={{position:'absolute',left:'84%',top:'55%'}}

                    >
                        <Icon name='cart-plus' size={25}/>
                    </TouchableOpacity>
                </Transitioning.View>
            )
        })
    };

    changeExpandOption=(number)=>{
        let tempExpandOption = this.state.expandOption;
        tempExpandOption[number] =! tempExpandOption[number];
        this.setState({expandOption: tempExpandOption})
    };

    render(){
        return(
            <View>
                {this.renderMenu(this.props.menu)}
            </View>
        )
    }
}

const styles = StyleSheet.create({
    boxStyle:{
        flexDirection:'row',
        fontSize:20,
        marginBottom:'1%',
        borderRadius:7,
        borderWidth:1,
        borderColor:'#087EA9',
        backgroundColor:'white',
        flex:1
    }

})
import React,{Component}来自'React';
从“react native”导入{视图、维度、文本、TouchableOpacity、样式表、按钮};
从“反应本机矢量图标/FontAwesome”导入图标;
从“react native reanimated”导入{Transition,Transitioning};
常量转换=(
);
导出默认类RestaurantMenu扩展React.Component{
建造师(道具){
超级(道具);
this.ref=React.createRef();
这个州={
cartItemsAmount:[],
屏幕宽度:(Dimensions.get('window')。宽度-10),
扩展选项:[]
}
}
返回金额=(金额)=>{
如果(金额类型==='undefined'){
返回0
}否则{
返还金额
}
};
renderMenu=(菜单)=>{
返回菜单.映射((项目,索引)=>{
让cartItemArray=this.state.cartItemsAmount;
设数字=指数+1;
让windowSize='13%';
if(this.state.expandOption[index]==true){
窗口大小='30%';
}
console.log(this.state.expandOption)
返回(
{dishNumber}{item.name}{'\n\n'}{item.price}0€{'\n'}
this.changeExpandOption(索引)}
>
细节
{
if(cartItemArray[索引]的类型=='undefined'){
cartItemArray[索引]=1;
}否则{
cartItemArray[索引]+;
};
this.setState({cartItemsAmount:cartItemArray});
}}
样式={{位置:'absolute',左:'75%',顶部:'55%}
>
{this.returnAmount(cartItemArray[index])}
{
if(cartItemArray[索引]的类型=='undefined'){
cartItemArray[索引]=0;
}
if(cartItemArray[索引]==0){
cartItemArray[索引]=0;
}否则{
cartItemArray[索引]--
};
this.setState({cartItemAmount:cartItemArray});
}}
样式={{位置:'absolute',左:'60%',顶:'55%}
>
{
if(cartItemArray[索引]!==0){
this.props.onPress(item、index、item.name、item.id、cartItemArray[index]、item.price);
cartItemArray[索引]=0;
this.setState({cartItemAmount:cartItemArray});
}
}}
样式={{位置:'absolute',左:'84%',顶:'55%}
>
)
})
};
changeExpandOption=(数字)=>{
设tempExpandOption=this.state.expandOption;
tempExpandOption[number]=!tempExpandOption[number];
this.setState({expandOption:tempExpandOption})
};
render(){
返回(
{this.renderMenu(this.props.menu)}
)
}
}
const styles=StyleSheet.create({
箱式:{
flexDirection:“行”,
尺寸:20,
保证金底部:“1%”,
边界半径:7,
边框宽度:1,
边框颜色:'#087EA9',
背景颜色:'白色',
弹性:1
}
})
这是调用RestaurantMenu组件的组件的一个片段:

return(
                <View style={[styles.Background]}>
                    <StatusBar/>
                    {this.orderToggle()}
                    {this.restaurantToggle()}
                    <ScrollView
                        pagingEnabled={true}
                        bounces={true}
                    >
                    <RestaurantMenu menu={RestaurantData[this.restaurantId].card} onPress={this.props.addItemToCart}/>
                    </ScrollView>
                </View>

const styles = StyleSheet.create({
    Background: {
        flex: 1,
        backgroundColor: 'white',
        alignItems: 'center',
        paddingTop:28
    }})
返回(
{this.orderToggle()}
{this.restaurantoggle()}
const styles=StyleSheet.create({
背景:{
弹性:1,
背景颜色:“白色”,
对齐项目:“居中”,
加油站:28
}})
因此,当我在boxstyle中使用flex:1,在scrollview中使用flex:1时,scrollview可以正常工作,但我无法扩展renderMenu函数的视图。当我在boxstyle中删除flex:1时,scrollview无法工作,但我可以扩展renderMenu函数的视图

有人想知道我做错了什么吗?提前谢谢