سلام دوستان
من با استفاده از router، یک Route درست کردم که با path بتونه پارامتر بگیره و صفحه هر todo رو نمایش بده ولی وقتی میخوام که todo رو به عنوان props به TodoDetailed در کامپوننت App بدم، چون states ها در Home قرار داره و Route ها در App، نمd تونم به state های Home دسترسی پیدا کنم.
راهی به غیر از انتقال state به App هست؟
App.js
import React, { Component } from 'react';
import { BrowserRouter, Route } from 'react-router-dom';
import { Home } from './components/pages/Home';
import DetailedTodo from './components/DetailedTodo';
class App extends Component {
render() {
return (
<BrowserRouter>
<div className="app">
<Route exact path='/' component={() => <Home getTodo={this.getTodo} />} />
<Route path="/todos/:todo_id" component={() => <DetailedTodo />}/>
</div>
</BrowserRouter>
)
}
}
export default App;
Home.js
import React, { Component } from 'react';
import Todos from '../Todos';
export class Home extends Component {
state = {
todos: [
{ task: 'Listen *****', id: 1, done: false, decription: 'Listen to New Album' },
{ task: 'Watch Movie', id: 2, done: false, decription: 'Watch Dark' },
{ task: 'Learn React', id: 3, done: false, decription: 'Learn React Router' }
],
filter: ''
}
render() {
return (
<div className="container pt-5">
<Todos todos={this.state.todos} />
</div>
)
}
}}
@hassantsf.dev سلام وقتتون بخیر.
بهترین روش استفاده از کانتکست یا ریداکس هست که من کانتکست رو پیشنهاد میکنم.
علاوه بر این مورد حتما توی پروژههای بزرگ میتونید ازش استفاده کنید.
این لینک رو بخونید در مورد کانتکست کمکتون میکنه.
این کار رو از نظر تئوری میشه انجام داد. اما در واقع کد اجرا نمیشه و به loopی داخل میشه که به صورت مدوام این اتفاقی که عرض میکنم می افته : فرزند در خواست آپدیت state رو داخل parent میده ، وقتی parent درخواست رو می گیره و state رو آپدیت میکنه باز به این خاطر که داخل componentWillMount مربوط به فرزند کد آپدیت state هست باز parent آپدیت میشه و کد شما کرش میکنه و میافته تو لوپ بینهایت. مگر اینکه کار گرفتن state رو داخل flow اصلی برنامه قرار ندید ( مثلا با یک button باشه ) که در کل این کار یک BEST PRACTICE نیست و شما کدهاتون را باید به صورتی بنویسید که structure خوبی داشته باشه که در آینده به مشکل نخورید.
@hassantsf.dev سلام وقتتون بخیر.
بهترین روش استفاده از کانتکست یا ریداکس هست که من کانتکست رو پیشنهاد میکنم.
علاوه بر این مورد حتما توی پروژههای بزرگ میتونید ازش استفاده کنید.
این لینک رو بخونید در مورد کانتکست کمکتون میکنه.
@MehdiAghighi
سلام
می خواستم ابتدا بدون state manager انجام بدم ولی طبق پاسخ ها معلوم شد که بهترین راه استفاده از state manager هست
متشکر از پاسختون
@hassantsf.dev خواهش میکنم.
به جز استفاده از state manager فقط میتونید استیت رو به app منتقل کنید.
چرا نمیخواید از state manager استفاده کنید ؟ از کانتکست استفاده کنید خیلی هم ساده و عالیه.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟