繁体   English   中英

React Native 中的 State Class 当我更新数组中的 object 时,组件不会更新

[英]State in React Native Class Component won't update when I update object in array

我使用 React Navigation 在DisplayItem屏幕中发送additional的数组,我使用componentDidMount设置 state 和数组,我使用 SectionList 显示数组,目标是使用selected pressOptional更新在array,它现在可以工作,但问题是它不会实时更新 state,只有当我重新渲染屏幕时,SectionList 才会发生变化。

阵列: additional

Array [
  Object {
    "data": Array [
      Object {
        "id": 0,
        "price": 1,
        "selected": true,
        "title": "Ranch",
        "type": "Sides",
      },
      Object {
        "id": 1,
        "price": 1,
        "selected": false,
        "title": "Blue Cheese",
        "type": "Sides",
      },
    ],
    "id": 0,
    "required": false,
    "title": "Sides",
  },
  Object {
    "data": Array [
      Object {
        "id": 0,
        "price": 0,
        "selected": false,
        "title": "Hot Sauce",
        "type": "Sauces",
      },
      Object {
        "id": 1,
        "price": 0,
        "selected": false,
        "title": "Medium Sauce",
        "type": "Sauces",
      },
    ],
    "id": 1,
    "required": true,
    "title": "Sauces",
  },
]

屏幕

class DisplayItem extends Component {
  constructor(props) {
    super(props);
    this.state = {
      additional: [],
    }
  }
  
  
  componentDidMount() {
    const { item } = this.props.route.params;
    const additional = item.additional;

    if (additional !== undefined) {
      this.setState({additional:[...additional]})
    }
  }

  pressOptional = (e) => {
    const additional = this.state.additional;

    additional.map((item) => {
      if (item.title == e.type) {
        item.data.map((item) => {
          if (item.id == e.id) {
            item.selected = !e.selected
          }
        })
      }
    })
  }


  render() {
    const { additional } = this.state;

  return (
    <View>
        <SectionList
            sections={additional}
            keyExtractor={(item, index) => item + index}
            renderSectionHeader={({ section: { type, required } }) => (
              <View>
                <Text>{type}</Text>
              </View>
            )}
          renderItem={({ item, section: { required } }) => {
              return (
                <TouchableOpacity key={item.id} onPress={() => this.pressOptional(item)}>
                    <Ionicons
                     name={item.selected == false ? 'square-outline' : 'square'}
                    />
                    <Text>{item.title}</Text>
                  <Text>${item.price}</Text>
                </TouchableOpacity>
              )
            }
          }
          /> 
    </View>
    )
}};

export default DisplayItem;

尝试使用 useState 代替 State 类: https://reactnative.dev/docs/state

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM