<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Zahid Zia</title>
    <description>The latest articles on Forem by Zahid Zia (@joshtheflame).</description>
    <link>https://forem.com/joshtheflame</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1075064%2F48c6da61-1c60-404a-aafd-a0279b0a866f.jpeg</url>
      <title>Forem: Zahid Zia</title>
      <link>https://forem.com/joshtheflame</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/joshtheflame"/>
    <language>en</language>
    <item>
      <title>How to set state from components</title>
      <dc:creator>Zahid Zia</dc:creator>
      <pubDate>Mon, 01 May 2023 20:04:30 +0000</pubDate>
      <link>https://forem.com/joshtheflame/how-to-set-state-from-components-1k4m</link>
      <guid>https://forem.com/joshtheflame/how-to-set-state-from-components-1k4m</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--I0lzJmeU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rgr1ryo1k7jixsvyl077.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--I0lzJmeU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rgr1ryo1k7jixsvyl077.JPG" alt="Image description" width="524" height="645"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I am a newbie in react and still struggling so developed a little task manager application and using Context API. I am unable to set state where I want to set it as a array list. Ideally it should set  where I am using useQuery from "Tasks.js" component. Please advise how to maintain state with the recent array changes. Currently its rendering tasks fetched from my middleware (express.js) and mysql database and no delete functionality is working.&lt;/p&gt;

&lt;h2&gt;
  
  
  App.jsx
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import Header from "./components/Header";
import Tasks from "./components/Tasks";
import AddTask from "./components/AddTask";
import { QueryClient, QueryClientProvider } from "react-query";
import { DataContext, DataProvider } from "./context/DataContext";
import { useContext } from "react";

function App() {
  //Initialize React Query Client
  const queryClient = new QueryClient();

  const showAddTask = useContext(DataContext);
  //const tasksLength = useContext(DataContext);

  return (
    &amp;lt;DataProvider&amp;gt;
      &amp;lt;div className="container"&amp;gt;
        &amp;lt;QueryClientProvider client={queryClient}&amp;gt;
          &amp;lt;Header /&amp;gt;
          {showAddTask &amp;amp;&amp;amp; &amp;lt;AddTask /&amp;gt;}
          &amp;lt;Tasks /&amp;gt;
        &amp;lt;/QueryClientProvider&amp;gt;
      &amp;lt;/div&amp;gt;
    &amp;lt;/DataProvider&amp;gt;
  );
}
export default App;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  DataContext.js
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { createContext, useState } from "react";
export const DataContext = createContext();

export const DataProvider = (props) =&amp;gt; {
  //Initialize button state and set function
  const [showAddTask, setShowAddTask] = useState(false);

  //Initiliaze Tasks state and set function
  const [myTasks, setTask] = useState([]);
  const [tasksLength, setTasksLength] = useState(0);

  return (
    &amp;lt;DataContext.Provider
      value={{
        tskstate: tasksLength,
        settskstate: setTasksLength,
        mystate: myTasks,
        setState: setTask,
        btnaddtaskstate: showAddTask,
        setbtnState: setShowAddTask,
      }}
    &amp;gt;
      {props.children}
    &amp;lt;/DataContext.Provider&amp;gt;
  );
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Header.jsx
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import PropTypes from "prop-types";
import Button from "./Button";
import { DataContext } from "../context/DataContext";
import { useContext } from "react";

const Header = ({ title }) =&amp;gt; {
  //const { mystate } = useContext(UserContext);
  const { btnaddtaskstate, showAddTask, setbtnState, setShowAddTask } =
    useContext(DataContext);

  const { mystate, setTasksState } = useContext(DataContext);

  const onToggle = () =&amp;gt; {
    setbtnState((btnaddtaskstate) =&amp;gt; !btnaddtaskstate);
  };
  return (
    &amp;lt;div&amp;gt;
      &amp;lt;header className="header"&amp;gt;
        &amp;lt;h1&amp;gt; {title} &amp;lt;/h1&amp;gt;
        &amp;lt;Button
          color={btnaddtaskstate ? "red" : "green"}
          text={btnaddtaskstate ? "Close" : "Add"}
          onClick={onToggle}
        /&amp;gt;
      &amp;lt;/header&amp;gt;
    &amp;lt;/div&amp;gt;
  );
};

Header.defaultProps = {
  title: "Task Tracker",
};

Header.propTypes = {
  title: PropTypes.string.isRequired,
};
export default Header;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Tasks.jsx
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { useContext, useState } from "react";
import { DataContext } from "../context/DataContext";
import Task from "./Task";
import { useQuery } from "react-query";
import { getTasks } from "../api/Tasks_Api";

const Tasks = ({ task }) =&amp;gt; {
  //const { myTasks, setTask } = useContext(DataContext);

  const { data: mydata = [] } = useQuery("TasksData", getTasks);

  return (
    &amp;lt;&amp;gt;
      {mydata.map((item, index) =&amp;gt; (
        &amp;lt;Task key={item.id} task={item} /&amp;gt;
      ))}
    &amp;lt;/&amp;gt;
  );
};

export default Tasks;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Task.jsx
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { FaTimes } from "react-icons/fa";
import { useContext } from "react";
import { DataContext } from "../context/DataContext";

const Task = ({ task }) =&amp;gt; {
  const { mystate, setState } = useContext(DataContext);

  //Delete Task function
  const deleteTask = (id) =&amp;gt; {
    setState(mystate.filter((task) =&amp;gt; task.id !== id));
  };

  //Toggle Reminder function
  const toggleReminder = (id) =&amp;gt; {
    setState(
      mystate.map((task) =&amp;gt;
        task.id === id ? { ...task, reminder: !task.reminder } : task
      )
    );
  };

  return (
    &amp;lt;div
      className={`task ${task.reminder ? "reminder" : ""}`}
      onDoubleClick={() =&amp;gt; toggleReminder(task.id)}
    &amp;gt;
      &amp;lt;h3&amp;gt;
        {task.text}{" "}
        &amp;lt;FaTimes
          style={{ color: "red", cursor: "pointer" }}
          onClick={() =&amp;gt; deleteTask(task.id)}
        /&amp;gt;
      &amp;lt;/h3&amp;gt;
      &amp;lt;p&amp;gt;{task.day}&amp;lt;/p&amp;gt;
    &amp;lt;/div&amp;gt;
  );
};

export default Task;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>react</category>
    </item>
  </channel>
</rss>
