मैं अपने राज्य को अपडेट करने की कोशिश कर रहा हूं ताकि एक नेस्टेड सरणी खाली हो जाए लेकिन बाकी राज्य वही रहता है।

मेरे राज्य वस्तु की तरह दिखता है:

this.state = {
    data: {
        type: "FeatureCollection",
        features: [1,2,3,4]
    }
}

और मैं काम करने के सबसे करीब हूं:

this.setState(prevState => ({
    data: [...prevState.data, (this.state.data.features.length = 0)]
}));

इस दृष्टिकोण के साथ मुझे जो कंसोल चेतावनी मिलती है वह है:

Do not mutate state directly. Use setState()  react/no-direct-mutation-state

लेकिन यह और कैसे संभव है?

बहुत धन्यवाद :)

1
Wisdom1 18 नवम्बर 2020, 18:15

2 जवाब

सबसे बढ़िया उत्तर

आपके कोड के साथ मुझे जो पहली समस्या दिखाई दे रही है, वह यह है कि आप data को किसी ऑब्जेक्ट से ऐरे में बदल रहे हैं। तो यह कम से कम होना चाहिए

this.setState(prevState => ({
  data: {...prevState.data, (this.state.data.features.length = 0)}
}));

फिर आप अभी भी this.state.data.features.length = 0 करके राज्य को बदल रहे हैं, इसलिए इसे ठीक करने के लिए, आपको उस सरणी को अपरिवर्तनीय रूप से अपडेट करना होगा:

this.setState(prevState => ({
  data: {
    ...prevState.data, 
    features: [] // Or whatever you need your new array to be
  }
}));

तो कहें कि आप अंत में एक और तत्व जोड़ना चाहते हैं, आप यह कर सकते हैं:

this.setState(prevState => ({
  data: {
    ...prevState.data, 
    features: [...prevState.data.features, 5]
  }
}));
2
Brian Thompson 18 नवम्बर 2020, 18:21

आपको इस तरह राज्य को अपडेट करना चाहिए। data राज्य में एक वस्तु है, एक सरणी नहीं।

this.setState(prevState => ({
    data: {...prevState.data, features: [] }
}));
1
Sarun UK 18 नवम्बर 2020, 18:20