{"id":2591,"date":"2024-10-20T20:07:35","date_gmt":"2024-10-20T20:07:35","guid":{"rendered":"https:\/\/smartjob.cl\/?p=2591"},"modified":"2024-11-25T02:25:01","modified_gmt":"2024-11-25T02:25:01","slug":"arquitectura-redux-para-swiftui","status":"publish","type":"post","link":"https:\/\/smartjob.cl\/en\/arquitectura-redux-para-swiftui\/","title":{"rendered":"Redux architecture for swiftui"},"content":{"rendered":"<p>In the development of modern applications, managing the state efficiently and scalable is crucial. One of the most popular architectures for state management is Redux, which offers a clear and predictable way to handle the status of the application. This article explores how to implement a REDux architecture in a swiftui application using Reswift and Reswiftthunk, along with the use pattern to encapsulate business logic. But if you are like me, and you like to put hands to the code directly, you can check the repository with the implementation here (https:\/\/github.com\/transmigrado\/archocurheswiftui), if you still do not know Redux and you would like to explore it as an alternative To your developments on Swift using swiftui, this article will help you leave.<\/p>\n<p>The motivation to implement a REDux architecture in one of the projects in which I am working, is born of the need to have more compatible architectures with the most modern work forms such as Jetpack Compose and in the case of iOS Swiftui, these two declarative technologies In order to create interfaces in mobile environments, they are very compatible with reactive architectures such as Redux, allowing enough friendly life cycles to maintain.<\/p>\n<p>In the project, Firebase was used for comfort issues, what was wanted to explore was like implementing an architecture that is handled by actions to modify the states of the application. You feel free to use the project, adding your own data consumption, since architecture is fully isolated from business logic, which is encapsulo in use cases (uses)<\/p>\n<p>&nbsp;<\/p>\n<h4 class=\"translation-block\">What is Redux?<\/h4>\n<p>REDux is a predictable state management architecture initially designed for JavaScript applications, especially those built with React. The main idea behind Redux is to have a single store (storage) that contains the status of the application and can only be modified through actions. A reducer, which is a pure function, receives the action and the current state, and returns a new state.<\/p>\n<p>&nbsp;<\/p>\n<h4 class=\"translation-block\">What is Reswift?<\/h4>\n<p>Reswift is an implementation of REDux on Swift for iOS applications. Redux is a predictable architecture pattern for the management of the application status, initially popularized by JavaScript applications such as those created with React. Reswift takes this pattern to the Swift ecosystem, offering a clear and structured way to handle the state of your iOS application.<\/p>\n<p>&nbsp;<\/p>\n<h4 class=\"translation-block\">What is Reswiftthunk?<\/h4>\n<p>Reswiftthunk is a reswift extension that allows the handling of asynchronous logic and secondary actions. Thunks are functions that can dispatch other actions or execute additional logic before dispatching an action. In Reswift, THUNKS help maintain the state of the clean and predictable application while allowing asynchronous operations such as call calls, database (chore .<\/p>\n<p>You can find these two bookstores in their respective repositories:<\/p>\n<p>Reswift repository: (https:\/\/github.com\/reswift\/reswift)<\/p>\n<p>Reswift-Thunk repository: (https:\/\/github.com\/reswift\/reswift-thunk)<\/p>\n<p>&nbsp;<\/p>\n<p>The data flow in this architecture will see something like that, usually the UI will shoot an action, this action will be received by the reducer, which will modify the state and in turn, this state will be heard by our UI component, in addition to being able to launch Secondary actions, such as calling an API or the database, we will use a thunk, the thunk will be a kind of bridge between the REDux flow and our business logic, which will be encapsulated in a use<img fetchpriority=\"high\" decoding=\"async\" class=\"alignnone wp-image-2592\" src=\"https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/01-300x174.png\" alt=\"\" width=\"768\" height=\"445\" srcset=\"https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/01-300x174.png 300w, https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/01-1024x594.png 1024w, https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/01-768x445.png 768w, https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/01-18x10.png 18w, https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/01.png 1149w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/><\/p>\n<p>&nbsp;<\/p>\n<h4 class=\"translation-block\">What is a reducer?<\/h4>\n<p>A reducer is a pure function that takes the current state of the application and an action as arguments, and returns a new state. The reducer function should not have side effects, that is, we must not use this function to call APIs, local databases or modify the UI, we only modify the properties based on an action, as shown below<\/p>\n<p><img decoding=\"async\" class=\"alignnone wp-image-2593\" src=\"https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/02-300x148.png\" alt=\"\" width=\"647\" height=\"319\" srcset=\"https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/02-300x148.png 300w, https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/02-1024x505.png 1024w, https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/02-768x379.png 768w, https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/02-18x9.png 18w, https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/02.png 1127w\" sizes=\"(max-width: 647px) 100vw, 647px\" \/>In this way we can create the necessary unit tests to prove a reduction, we must simply declare a state and the action we want to prove, after the reducer is invoked with this action, the new state must meet our conditions.<\/p>\n<p><img decoding=\"async\" class=\"alignnone wp-image-2594\" src=\"https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/03-300x184.png\" alt=\"\" width=\"625\" height=\"383\" srcset=\"https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/03-300x184.png 300w, https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/03-1024x628.png 1024w, https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/03-768x471.png 768w, https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/03-18x12.png 18w, https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/03.png 1163w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><\/p>\n<h4><strong>What is a thunk?<\/strong><\/h4>\n<p>A thunk is a function that is used to handle asynchronous actions or actions that do not result in immediate state changes. In other words, it allows us that a dispatched action is not only an object of simple action, but can be a function that contains additional logic, such as API calls, consultations to a local database or any other asynchronous operation, before dispatch regular action.<\/p>\n<p>A thunk will be a function that does not directly return an object of action, but returns a function that receives the Dispatch as an argument. This function can execute asynchronous logic and then dispatch one or more actions based on the result of this logic.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2595\" src=\"https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/04-300x182.png\" alt=\"\" width=\"595\" height=\"361\" srcset=\"https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/04-300x182.png 300w, https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/04-1024x622.png 1024w, https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/04-768x466.png 768w, https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/04-18x12.png 18w, https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/04.png 1161w\" sizes=\"(max-width: 595px) 100vw, 595px\" \/><\/p>\n<p>As we describe before, we will use a thunk to execute an asynchronous effect, in this case we will call Fetchashncdata of our use to bring the posts and then dispatch an action so that the state of our application changes.<\/p>\n<p>Here we can see how a thunk works communicating with the flow we describe at the beginning, we will detail each step.<\/p>\n<h4><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2596\" src=\"https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/05-300x120.png\" alt=\"\" width=\"645\" height=\"258\" srcset=\"https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/05-300x120.png 300w, https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/05-1024x410.png 1024w, https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/05-768x308.png 768w, https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/05-18x7.png 18w, https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/05-1200x481.png 1200w, https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/05.png 1223w\" sizes=\"(max-width: 645px) 100vw, 645px\" \/><strong>PostThunks<\/strong><\/h4>\n<p>The postthunks class acts as a container for asynchronous logic that recovers posts from a service or use case.<\/p>\n<ul>\n<li><strong>M\u00e9todo fetchThunk():<\/strong><br \/>\nThis method returns a THUNK, which is a function that allows asynchronous operations to be executed before dispatching actions in the Redux flow.<\/p>\n<ul>\n<li><strong>Thunk fetchThunk:<\/strong><br \/>\nThis Thunk receives Dispatch (which allows dispatching actions) and Getstate (which allows access to the current state) as arguments. This is where the flow of the actions is managed as well<\/p>\n<ul>\n<li><strong>Dispatch(FetchAction()):<\/strong> Before executing the asynchronous task, an action called fetchaction is dispatched, which probably indicates in the user interface that the application is loading (such as showing a load indicator).<\/li>\n<li><strong>Task {}:<\/strong> A task block is used to run asynchronous code within the context of the THUNK. Here is called the Fetchasyncdata () method from the Usecase, which is an asynchronous call that recovers posts data.<\/li>\n<li><strong>Dispatch(PostsAction(list: posts)):<\/strong> If the API call is successful, the recovered posts are dispatched through the postsaction action, which will update the status of the application with the posts list.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h4><strong>PostsState:<\/strong><\/h4>\n<p>This structure defines how the state related to the posts in the application is represented.<\/p>\n<ul>\n<li><strong>list:<\/strong> Stores a list of posts that will be displayed in the application.<\/li>\n<li><strong>isLoading:<\/strong> Indicate whether the application is currently in the process of loading the data.<\/li>\n<\/ul>\n<ol start=\"3\">\n<li><strong> postsReducer :<\/strong><\/li>\n<\/ol>\n<p>This reducer has the function of taking action and the current state of the application and returns a new state, updated according to the action.<\/p>\n<ul>\n<li><strong>FetchAction:<\/strong> When this action is dispatched, the reducer changes the Isloading value to True, indicating that the application is in the process of obtaining data.<\/li>\n<li><strong>PostsAction:<\/strong> When the posts are recovered and dispatched, this action updates the list of posts in the state (state.posts.list) and puts isloading in false, indicating that the load is over.<\/li>\n<\/ul>\n<ol start=\"4\">\n<li><strong> General flow of thunk:<\/strong><\/li>\n<\/ol>\n<ul>\n<li>When calling Fetchthunk (), the Thunk dispatches the fetchaction action to indicate that the posts load has begun.<\/li>\n<li>Then make an asynchronous call to recover the posts through the use.<\/li>\n<li>If the call is successful, dispatched the postsaction action with the list of posts obtained, which the State updates.<\/li>\n<li>If the so -called failure, it simply prints the error without affecting the State (although it could be improved with an error action).<\/li>\n<\/ul>\n<p><strong>\u00a0<\/strong><\/p>\n<p>In conclusion, the combination of REDux with Reswift and Reswiftthunk offers a robust and predictable architecture to handle the state in Swiftui applications. By encapsulating the business logic in uses and handling asynchronous actions through Thunks, a clear and efficient flow is achieved to manage the life cycle of the data. This approach not only allows a more organized and testable code, but also facilitates the implementation of scalable and maintainable architectures in modern mobile projects. Inviting developers to explore this architecture is an excellent opportunity to improve their skills in asynchronous state management and logic in Swiftui applications.<\/p>\n<p>&nbsp;<\/p>\n<p>By: <a href=\"https:\/\/www.linkedin.com\/in\/jorge-acosta-50765925\/\">Jorge Acosta Tech Lead<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>En el desarrollo de aplicaciones modernas, manejar el estado de manera eficiente y escalable es crucial. Una de las arquitecturas m\u00e1s populares para la gesti\u00f3n del estado es Redux, que ofrece una manera clara y predecible de manejar el estado de la aplicaci\u00f3n. Este art\u00edculo explora c\u00f3mo implementar una arquitectura Redux en una aplicaci\u00f3n SwiftUI [&hellip;]<\/p>","protected":false},"author":2,"featured_media":2623,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-2591","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Arquitectura Redux para SwiftUI - SmartJob<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/smartjob.cl\/en\/arquitectura-redux-para-swiftui\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Arquitectura Redux para SwiftUI - SmartJob\" \/>\n<meta property=\"og:description\" content=\"En el desarrollo de aplicaciones modernas, manejar el estado de manera eficiente y escalable es crucial. Una de las arquitecturas m\u00e1s populares para la gesti\u00f3n del estado es Redux, que ofrece una manera clara y predecible de manejar el estado de la aplicaci\u00f3n. Este art\u00edculo explora c\u00f3mo implementar una arquitectura Redux en una aplicaci\u00f3n SwiftUI [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/smartjob.cl\/en\/arquitectura-redux-para-swiftui\/\" \/>\n<meta property=\"og:site_name\" content=\"SmartJob\" \/>\n<meta property=\"article:published_time\" content=\"2024-10-20T20:07:35+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-25T02:25:01+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/iStock-1518851638.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2384\" \/>\n\t<meta property=\"og:image:height\" content=\"1257\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Santiago Montanez\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Santiago Montanez\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/smartjob.cl\/arquitectura-redux-para-swiftui\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/smartjob.cl\/arquitectura-redux-para-swiftui\/\"},\"author\":{\"name\":\"Santiago Montanez\",\"@id\":\"https:\/\/smartjob.cl\/#\/schema\/person\/976c490d0132fd1f2bfce39314020199\"},\"headline\":\"Arquitectura Redux para SwiftUI\",\"datePublished\":\"2024-10-20T20:07:35+00:00\",\"dateModified\":\"2024-11-25T02:25:01+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/smartjob.cl\/arquitectura-redux-para-swiftui\/\"},\"wordCount\":1497,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/smartjob.cl\/#organization\"},\"image\":{\"@id\":\"https:\/\/smartjob.cl\/arquitectura-redux-para-swiftui\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/iStock-1518851638.jpg\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/smartjob.cl\/arquitectura-redux-para-swiftui\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/smartjob.cl\/arquitectura-redux-para-swiftui\/\",\"url\":\"https:\/\/smartjob.cl\/arquitectura-redux-para-swiftui\/\",\"name\":\"Arquitectura Redux para SwiftUI - SmartJob\",\"isPartOf\":{\"@id\":\"https:\/\/smartjob.cl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/smartjob.cl\/arquitectura-redux-para-swiftui\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/smartjob.cl\/arquitectura-redux-para-swiftui\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/iStock-1518851638.jpg\",\"datePublished\":\"2024-10-20T20:07:35+00:00\",\"dateModified\":\"2024-11-25T02:25:01+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/smartjob.cl\/arquitectura-redux-para-swiftui\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/smartjob.cl\/arquitectura-redux-para-swiftui\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/smartjob.cl\/arquitectura-redux-para-swiftui\/#primaryimage\",\"url\":\"https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/iStock-1518851638.jpg\",\"contentUrl\":\"https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/iStock-1518851638.jpg\",\"width\":2384,\"height\":1257,\"caption\":\"Medium Shot of a Woman Working as a Developer, Surrounded by Big Screens Displaying Lines of Code in a Monitoring Room. Female Programmer Using Desktop Computer, Analysing Data, Creating AI Software\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/smartjob.cl\/arquitectura-redux-para-swiftui\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/smartjob.cl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Arquitectura Redux para SwiftUI\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/smartjob.cl\/#website\",\"url\":\"https:\/\/smartjob.cl\/\",\"name\":\"SmartJob\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/smartjob.cl\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/smartjob.cl\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/smartjob.cl\/#organization\",\"name\":\"SmartJob\",\"url\":\"https:\/\/smartjob.cl\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/smartjob.cl\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/smartjob.cl\/wp-content\/uploads\/2022\/03\/cropped-cropped-smartjs.png\",\"contentUrl\":\"https:\/\/smartjob.cl\/wp-content\/uploads\/2022\/03\/cropped-cropped-smartjs.png\",\"width\":370,\"height\":79,\"caption\":\"SmartJob\"},\"image\":{\"@id\":\"https:\/\/smartjob.cl\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/smartjob.cl\/#\/schema\/person\/976c490d0132fd1f2bfce39314020199\",\"name\":\"Santiago Montanez\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/smartjob.cl\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1e680bab9e69a383abfec90f65f78595463331e5b36b3114d35882efc11634c4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/1e680bab9e69a383abfec90f65f78595463331e5b36b3114d35882efc11634c4?s=96&d=mm&r=g\",\"caption\":\"Santiago Montanez\"},\"url\":\"https:\/\/smartjob.cl\/en\/author\/sanmontanez\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Arquitectura Redux para SwiftUI - SmartJob","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/smartjob.cl\/en\/arquitectura-redux-para-swiftui\/","og_locale":"en_US","og_type":"article","og_title":"Arquitectura Redux para SwiftUI - SmartJob","og_description":"En el desarrollo de aplicaciones modernas, manejar el estado de manera eficiente y escalable es crucial. Una de las arquitecturas m\u00e1s populares para la gesti\u00f3n del estado es Redux, que ofrece una manera clara y predecible de manejar el estado de la aplicaci\u00f3n. Este art\u00edculo explora c\u00f3mo implementar una arquitectura Redux en una aplicaci\u00f3n SwiftUI [&hellip;]","og_url":"https:\/\/smartjob.cl\/en\/arquitectura-redux-para-swiftui\/","og_site_name":"SmartJob","article_published_time":"2024-10-20T20:07:35+00:00","article_modified_time":"2024-11-25T02:25:01+00:00","og_image":[{"width":2384,"height":1257,"url":"https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/iStock-1518851638.jpg","type":"image\/jpeg"}],"author":"Santiago Montanez","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Santiago Montanez","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/smartjob.cl\/arquitectura-redux-para-swiftui\/#article","isPartOf":{"@id":"https:\/\/smartjob.cl\/arquitectura-redux-para-swiftui\/"},"author":{"name":"Santiago Montanez","@id":"https:\/\/smartjob.cl\/#\/schema\/person\/976c490d0132fd1f2bfce39314020199"},"headline":"Arquitectura Redux para SwiftUI","datePublished":"2024-10-20T20:07:35+00:00","dateModified":"2024-11-25T02:25:01+00:00","mainEntityOfPage":{"@id":"https:\/\/smartjob.cl\/arquitectura-redux-para-swiftui\/"},"wordCount":1497,"commentCount":0,"publisher":{"@id":"https:\/\/smartjob.cl\/#organization"},"image":{"@id":"https:\/\/smartjob.cl\/arquitectura-redux-para-swiftui\/#primaryimage"},"thumbnailUrl":"https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/iStock-1518851638.jpg","inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/smartjob.cl\/arquitectura-redux-para-swiftui\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/smartjob.cl\/arquitectura-redux-para-swiftui\/","url":"https:\/\/smartjob.cl\/arquitectura-redux-para-swiftui\/","name":"Arquitectura Redux para SwiftUI - SmartJob","isPartOf":{"@id":"https:\/\/smartjob.cl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/smartjob.cl\/arquitectura-redux-para-swiftui\/#primaryimage"},"image":{"@id":"https:\/\/smartjob.cl\/arquitectura-redux-para-swiftui\/#primaryimage"},"thumbnailUrl":"https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/iStock-1518851638.jpg","datePublished":"2024-10-20T20:07:35+00:00","dateModified":"2024-11-25T02:25:01+00:00","breadcrumb":{"@id":"https:\/\/smartjob.cl\/arquitectura-redux-para-swiftui\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/smartjob.cl\/arquitectura-redux-para-swiftui\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/smartjob.cl\/arquitectura-redux-para-swiftui\/#primaryimage","url":"https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/iStock-1518851638.jpg","contentUrl":"https:\/\/smartjob.cl\/wp-content\/uploads\/2024\/10\/iStock-1518851638.jpg","width":2384,"height":1257,"caption":"Medium Shot of a Woman Working as a Developer, Surrounded by Big Screens Displaying Lines of Code in a Monitoring Room. Female Programmer Using Desktop Computer, Analysing Data, Creating AI Software"},{"@type":"BreadcrumbList","@id":"https:\/\/smartjob.cl\/arquitectura-redux-para-swiftui\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/smartjob.cl\/"},{"@type":"ListItem","position":2,"name":"Arquitectura Redux para SwiftUI"}]},{"@type":"WebSite","@id":"https:\/\/smartjob.cl\/#website","url":"https:\/\/smartjob.cl\/","name":"SmartJob","description":"","publisher":{"@id":"https:\/\/smartjob.cl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/smartjob.cl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/smartjob.cl\/#organization","name":"SmartJob","url":"https:\/\/smartjob.cl\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/smartjob.cl\/#\/schema\/logo\/image\/","url":"https:\/\/smartjob.cl\/wp-content\/uploads\/2022\/03\/cropped-cropped-smartjs.png","contentUrl":"https:\/\/smartjob.cl\/wp-content\/uploads\/2022\/03\/cropped-cropped-smartjs.png","width":370,"height":79,"caption":"SmartJob"},"image":{"@id":"https:\/\/smartjob.cl\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/smartjob.cl\/#\/schema\/person\/976c490d0132fd1f2bfce39314020199","name":"Santiago Montanez","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/smartjob.cl\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/1e680bab9e69a383abfec90f65f78595463331e5b36b3114d35882efc11634c4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1e680bab9e69a383abfec90f65f78595463331e5b36b3114d35882efc11634c4?s=96&d=mm&r=g","caption":"Santiago Montanez"},"url":"https:\/\/smartjob.cl\/en\/author\/sanmontanez\/"}]}},"_links":{"self":[{"href":"https:\/\/smartjob.cl\/en\/wp-json\/wp\/v2\/posts\/2591","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/smartjob.cl\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/smartjob.cl\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/smartjob.cl\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/smartjob.cl\/en\/wp-json\/wp\/v2\/comments?post=2591"}],"version-history":[{"count":6,"href":"https:\/\/smartjob.cl\/en\/wp-json\/wp\/v2\/posts\/2591\/revisions"}],"predecessor-version":[{"id":2624,"href":"https:\/\/smartjob.cl\/en\/wp-json\/wp\/v2\/posts\/2591\/revisions\/2624"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/smartjob.cl\/en\/wp-json\/wp\/v2\/media\/2623"}],"wp:attachment":[{"href":"https:\/\/smartjob.cl\/en\/wp-json\/wp\/v2\/media?parent=2591"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/smartjob.cl\/en\/wp-json\/wp\/v2\/categories?post=2591"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/smartjob.cl\/en\/wp-json\/wp\/v2\/tags?post=2591"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}