Mesusjk
4 سال پیش توسط Mesusjk مطرح شد
5 پاسخ

فیلتر کردن لیست

دوستان سلام. یه پروژه تمرینی todo دارم که یه state بنام todos تعریف کردم، که یه آرایه هست. تمام todoهای من توی این آرایه میرن. سه تا button هم توی صفحه دارم به اسم های Active, All, Completed. وظیفه Active اینه که item هایی که انجام نشده هستن و done: false دارن(done در اینجا نشون میده که کار انجام شده یا نه)، رو در صفحه نشون بده.
وظیفه Completed ، برعکس کار Active هست.
یه state به نام statusDone دارم که درحالت پیشفرض، false هست. با توجه به این، یه متغیر بنام filterTodos ساختم که وظیفه داره todo هایی که doneشون مساوی با statusDone هست رو برگردونه. به این صورت:

let filterTodos = todos.filter(item => item.done === statusDone);

باتوجه به همه اینا، برای نمایش todoها توی صفحه ام، از filterTodos استفاده کردم. به این صورت:

            filterTodos.length == 0 ?
            <p>There isn't any todo</p> :
            filterTodos.map(item => <TodoItem 
              key={item.key}
              text={item.text}
              item={item}
              done={this.toggleTodo.bind(this)}
              />)

TodoItem یه کامپوننته که کدهای آماده یک todo در اون قرار داره.

دکمه های Active و Completed هم که در بالا گفتم، وظیفه تغییر statusDone رو دارن. به این صورت:

          <button onClick={() => this.setState({statusDone : false})} className="filter-btn" type="button">Active</button>
          <button onClick={() => this.setState({statusDone : true})} className="filter-btn" type="button">Completed</button>

حالا سوال من اینه که buttonی که اسمش All بود رو چطور بسازم که هم todoهای انجام شده رو نشون بده و هم todoهای انجام نشده؟
امیدوارم خستتون نکرده باشم!😊
@arian @mohsenbostan @milad @hesammousavi @forughi.vahid @ali.bayat


ثبت پرسش جدید
سینا شاه‌اویسی
تخصص : برنامه نویس فرانت اند
@sinashahoveisi 4 سال پیش مطرح شد
1

به جای این که state به اسم statusDone داشته باشید میتونید state به اسم ShowTodos داشته باشید که مقادیر All و Complete و Active میگیرن و توی filterTodos هر موقع که میخواید فیلتر کنید اگر All بود دیگه فیلتر نکنید.


Mesusjk
تخصص : برنامه نویس جنگو و پایتون
@Mesusjk 4 سال پیش مطرح شد
0

@sinashahoveisi زیاد متوجه نشدم. میشه بیشتر توضیح بدید؟


وحید
تخصص : Fullstack
@forughi.vahid 4 سال پیش آپدیت شد
1

@Mesusjk
شما سه تا حالت وضعیت دارید و statusDone بولین گرفتید که دو حالت رو میتونه تو خودش ذخیره کنه، خوب اینجا چند تا راه دارید

  • یکی اینکه وقتی دکمه all رو میزنید یه فلگی رو ست کنید و توی نمایش هم چک کنید اگر اون فلگ ست شده بود به جای filterTodos خود todos رو نمایش بدید.
  • وقتی دکمه all رو میزنید statusDone رو null کنید و توی filterTodos چک کنید اگر statusDone نال بود فیلترتون کلا true برگردونه که کل todos رو بهتون بده
  • همونطور که آقا سینا گفتن به جای اینکه statusDone رو بولین بگیرید ، مقادیر active,completed,all رو توش ذخیره کنید.
  • فقط اینا نیست اگر فکر کنید حتما راه های دیگه هم به ذهنتون میرسه .

سینا شاه‌اویسی
تخصص : برنامه نویس فرانت اند
@sinashahoveisi 4 سال پیش مطرح شد
1

@Mesusjk
همان طور که آقا وحید گفتن شما سه وضعیت دارید و با توجه به هر وضعیت فیلتر مورد نظر را اعمال کنید


Mesusjk
تخصص : برنامه نویس جنگو و پایتون
@Mesusjk 4 سال پیش مطرح شد
0

@sinashahoveisi @sinashahoveisi هرسه تاشونو درست کردم. کاملا هم درست کار میکنه.
خیلی ممنون


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام