উত্তর:
this.state.myArray.push('new value')
অ্যারের পরিবর্তে প্রসারিত অ্যারের দৈর্ঘ্য প্রদান করে। অ্যারে.প্রোটোটাইপ.পুশ () ।
আমি অনুমান করি আপনি প্রত্যাশিত মানটি অ্যারে হিসাবে প্রত্যাশা করবেন।
দেখে মনে হচ্ছে এটি প্রতিক্রিয়াটির আচরণ নয়:
সেট.স্টেট () এর পরে কল করার পরে এই.স্টেটকে সরাসরি কখনও পরিবর্তন করুন না কেন আপনি তৈরি রূপান্তর প্রতিস্থাপন করতে পারে। এই স্টেটের সাথে এমন আচরণ করুন যেন তা পরিবর্তনযোগ্য নয়। প্রতিক্রিয়া । উপাদান ।
আমার ধারণা, আপনি এটি এমনটি করবেন (প্রতিক্রিয়াটির সাথে পরিচিত নন):
var joined = this.state.myArray.concat('new value');
this.setState({ myArray: joined })
setState()
উপাদানগুলির স্থিতিতে পরিবর্তনকে চিহ্নিত করে এবং প্রতিক্রিয়া জানায় যে এই উপাদানটি এবং তার শিশুদের আপডেট হওয়া রাষ্ট্রের সাথে পুনরায় রেন্ডার করা দরকার। সুতরাং আমি অনুমান করি যে এটি ঠিক করার পরে ঠিক এই মুহুর্তে আপডেট হয়নি। আপনি দয়া করে একটি কোড উদাহরণ পোস্ট করতে পারেন, যেখানে আপনি দেখতে পাচ্ছেন আপনি কোন পয়েন্টটি সেট করছেন এবং লগ করছেন, দয়া করে?
.concat('new value');
.concat(['new value']);
concat()
পদ্ধতির জন্য পুরোপুরি বৈধ are দেখুন: বিকাশকারী.মোজিলা.আর.ইন- ইউএস / ডকস / ওয়েবে /
এস 6 ব্যবহার করে এটি এটির মতো করা যায়:
this.setState({ myArray: [...this.state.myArray, 'new value'] }) //simple value
this.setState({ myArray: [...this.state.myArray, ...[1,2,3] ] }) //another array
this.props
এবং this.state
অবিচ্ছিন্নভাবে আপডেট করা হতে পারে, আপনার পরবর্তী অবস্থার গণনার জন্য তাদের মানগুলিতে নির্ভর করা উচিত নয়" " একটি অ্যারে সংশোধন করার ক্ষেত্রে, যেহেতু অ্যারে ইতিমধ্যে একটি সম্পত্তি হিসাবে উপস্থিত রয়েছে this.state
এবং আপনাকে নতুন মান সেট করার জন্য এর মান উল্লেখ করতে হবে, আপনার setState()
যুক্তি হিসাবে পূর্ববর্তী অবস্থার সাথে একটি ফাংশন স্বীকার করে ফর্মটি ব্যবহার করা উচিত । উদাহরণ: this.setState(prevState => ({ myArray: [...this.state.myArray, 'new value'] }));
দেখুন: reactjs.org/docs/...
কখনও রাজ্যকে সরাসরি রূপান্তর করার পরামর্শ দেওয়া হয়নি।
পরবর্তী প্রতিক্রিয়া সংস্করণগুলিতে প্রস্তাবিত পদ্ধতির প্রতিযোগিতামূলক পরিস্থিতি প্রতিরোধের জন্য রাজ্যগুলিকে সংশোধন করার সময় আপডেটের ফাংশনটি ব্যবহার করা হয়:
অ্যারের শেষে স্ট্রিং পুশ করুন
this.setState(prevState => ({
myArray: [...prevState.myArray, "new value"]
}))
অ্যারের শুরুতে স্ট্রিং পুশ করুন
this.setState(prevState => ({
myArray: ["new value", ...prevState.myArray]
}))
অ্যারের শেষে অবজেক্টটি পুশ করুন
this.setState(prevState => ({
myArray: [...prevState.myArray, {"name": "object"}]
}))
অ্যারের শুরুর দিকে অবজেক্টটি পুশ করুন
this.setState(prevState => ({
myArray: [ {"name": "object"}, ...prevState.myArray]
}))
this.setState((prevState) => ({ myArray: [values, ...prevState.myArray], }));
আপনার মোটেই রাষ্ট্র পরিচালনা করা উচিত নয়। কমপক্ষে, সরাসরি না। আপনি যদি আপনার অ্যারে আপডেট করতে চান তবে আপনি এই জাতীয় কিছু করতে চাইবেন।
var newStateArray = this.state.myArray.slice();
newStateArray.push('new value');
this.setState(myArray: newStateArray);
রাষ্ট্রীয় অবজেক্টে সরাসরি কাজ করা বাঞ্ছনীয় নয়। আপনি প্রতিক্রিয়াটির অপরিবর্তনযোগ্যতা সহায়কদেরও একবার দেখতে পারেন।
.slice()
একটি নতুন অ্যারে তৈরি করতে এবং অপরিবর্তনশীলতা সংরক্ষণেও ব্যবহার করে। সাহায্যের জন্য ধন্যবাদ.
আপনি .concat
নতুন ডেটা দিয়ে আপনার অ্যারের অনুলিপি তৈরি করতে পদ্ধতিটি ব্যবহার করতে পারেন :
this.setState({ myArray: this.state.myArray.concat('new value') })
তবে .concat
অ্যারে পাস করার সময় পদ্ধতির বিশেষ আচরণ থেকে সাবধান থাকুন - [1, 2].concat(['foo', 3], 'bar')
ফলাফল হবে [1, 2, 'foo', 3, 'bar']
।
এই কোডটি আমার পক্ষে কাজ করে:
fetch('http://localhost:8080')
.then(response => response.json())
.then(json => {
this.setState({mystate: this.state.mystate.push.apply(this.state.mystate, json)})
})
fetch(`api.openweathermap.org/data/2.5/forecast?q=${this.searchBox.value + KEY} `) .then( response => response.json() ) .then( data => { this.setState({ reports: this.state.reports.push.apply(this.state.reports, data.list)}); });
this.state = { reports=[] }
... পিএলএস আমি জানতে চাই যে আমি কী ভুল করছি
যদি আপনিও ইউআর ইউআই (যেমন আপনার ফ্ল্যাটলিস্ট) আপ টু ডেট রাখতে চান তবে প্রিভস্টেট ব্যবহার করুন: নীচের উদাহরণে ব্যবহারকারী যদি বোতামটিতে ক্লিক করেন তবে এটি তালিকায় একটি নতুন অবজেক্ট যুক্ত করতে চলেছে (মডেল এবং ইউআই উভয় ক্ষেত্রে) )
data: ['shopping','reading'] // declared in constructor
onPress={() => {this.setState((prevState, props) => {
return {data: [new obj].concat(prevState.data) };
})}}.
নিম্নলিখিত পদ্ধতিতে আমরা অবজেক্টগুলি চেক এবং আপডেট করতে পারি
this.setState(prevState => ({
Chart: this.state.Chart.length !== 0 ? [...prevState.Chart,data[data.length - 1]] : data
}));
এখানে আপনি এই জাতীয় পদক্ষেপের মতো বস্তুকে ঠেলাতে পারবেন না। আপনি স্বাভাবিক অ্যারেতে আপনার মতো ধাক্কা দিতে পারেন। এখানে আপনাকে রাষ্ট্র নির্ধারণ করতে হবে,
this.setState({
myArray: [...this.state.myArray, 'new value']
})
আপনি যদি কেবলমাত্র রাষ্ট্রটিকে আপডেট করার চেষ্টা করছেন
handleClick() {
this.setState(
{myprop: this.state.myprop +1}
})
}
এই পদ্ধতির বিবেচনা করুন
handleClick() {
this.setState(prevState => {
return {
count: prevState.count + 1
}
})
}
মূলত প্রিপস্টেট আমাদের জন্য এটি লিখছে st
console.log(this.state.myArray)
এটি সবসময় একটি পিছনে। কোন ধারণা কেন?