<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="273095" data-post-id="273095">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="sergio" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sergio/120/26966_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  sergio
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I use Liveview the vast majority of features. I always think: can I do this with Liveview, first and foremost. I consider Javascript a liability in my project.</p>
<p>In cases I feel like client-side would feel nicer for users, I use AlpineJS with Phoenix Hooks.</p>
<p>Example: I use a Phoenix Hook to send an event to my Liveview after mount. The Liveview sends price points to my javascript hook, which then renders a chart.js for price history.</p>
<p>Page loads really fast, and I don’t bog down initial page load by calculating all the chart stuff.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="273095" data-batch-url="/posts/batch_likers">
                        4
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/which-javascript-framework-do-you-prefer-to-use-with-phoenix/40880/32">Post #31</a>
	                </div>
	            </div>
              <div id="likers-container-273095" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="273095"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #31"></div>
  </section>
</div>
    <div class="postbit" id="273224" data-post-id="273224">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="mathieuprog" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/mathieuprog/120/16860_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  mathieuprog
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>My two libraries of choices for the frontend are:</p>
<ul>
<li>
<p>SolidJS – for SPAs requiring a particularly strong focus on UX/UI and lots of specific customization of client components and behaviors;</p>
</li>
<li>
<p>LiveView – for all the other type of apps.</p>
</li>
</ul>
<p>(and I really dislike Svelte)</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="273224" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/which-javascript-framework-do-you-prefer-to-use-with-phoenix/40880/33">Post #32</a>
	                </div>
	            </div>
              <div id="likers-container-273224" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="273224"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #32"></div>
  </section>
</div>
    <div class="postbit" id="273253" data-post-id="273253">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="derpycoder" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/derpycoder/120/31388_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  derpycoder
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="mathieuprog" data-post="33" data-topic="40880">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/mathieuprog/48/16860_2.png" class="avatar"> mathieuprog:</div>
<blockquote>
<p>I really dislike Svelte</p>
</blockquote>
</aside>
<p>Can you please tell me your view point? Did you find the edge cases where it fails?</p>
<p>For me, the breaking point was the fake html, css and js. It looked like I’m writing normal code in separate files, however once it compiled, it was mush. I couldn’t debug it properly.</p>
<p>Also, it was outdone by Solid.js.</p>
<p>Will give the below framework a try tonight, but maybe end up writing plain JavaScript or use Alpine.</p><div class="youtube-onebox lazy-video-container" data-video-id="x2eF3YLiNhY" data-video-title="Qwik… the world's first O(1) JavaScript framework?" data-video-start-time="" data-provider-name="youtube">
  <a href="https://www.youtube.com/watch?v=x2eF3YLiNhY" target="_blank" class="video-thumbnail" rel="noopener nofollow ugc">
    <img class="youtube-thumbnail" src="https://img.youtube.com/vi/x2eF3YLiNhY/maxresdefault.jpg" title="Qwik… the world's first O(1) JavaScript framework?" width="690" height="388">
  </a>
</div>
 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="273253" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/which-javascript-framework-do-you-prefer-to-use-with-phoenix/40880/34">Post #33</a>
	                </div>
	            </div>
              <div id="likers-container-273253" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="273253"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #33"></div>
  </section>
</div>
    <div class="postbit" id="273296" data-post-id="273296">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="mathieuprog" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/mathieuprog/120/16860_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  mathieuprog
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I had started to write a codebase in Svelte for almost a year and didn’t like the outcome of it at all.</p>
<p>The main reason is the lack of composability of its reactive variables. Svelte offers reactive values, reactive statements and stores. Basically if you want to create reusable reactive utilities you have to rely on stores, but it never felt natural to me to build many stores and derived stores, move state and state management outside of the components, … Mostly I ended up with very large components with lots of state and state management in the same file.</p>
<p>Later on I tried on SolidJS and it felt immediately much easier and natural to organize my app’s state. Just shortly after picking up Solid, I was already creating some packages for my app with utilities to help with state management. The experience was totally different; looking back I would even choose React over Svelte despite the superior performance of Svelte, as I think it just doesn’t scale well for larger apps (and I believe every app grows large or is intended to) for the reasons mentioned.</p>
<p>Other points I don’t like about Svelte:</p>
<ul>
<li>object props are considered mutable by default</li>
<li>magic, implicit, nonstandard syntax</li>
<li>community focused on SSR with SvelteKit</li>
<li>no error boundaries <a href="https://svelte.dev/repl/29940fec3acc47b39a94d36f9cec6f53?version=3.55.0" class="inline-onebox" rel="noopener nofollow ugc">Hello world • Playground • Svelte</a> (you can’t build a serious app without this feature in my opinion)</li>
</ul> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="273296" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/which-javascript-framework-do-you-prefer-to-use-with-phoenix/40880/35">Post #34</a>
	                </div>
	            </div>
              <div id="likers-container-273296" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="273296"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #34"></div>
  </section>
</div>
    <div class="postbit" id="273544" data-post-id="273544">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="olafura" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/olafura/120/12420_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  olafura
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Really love how easy it’s to use Lit for frontend, easy to debug since it’s just the dom and you can just inspect an element and run functions.</p>
<p>It also allows for real separation of concerns between Phoenix and Liveview and the JavaScript part.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="273544" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/which-javascript-framework-do-you-prefer-to-use-with-phoenix/40880/36">Post #35</a>
	                </div>
	            </div>
              <div id="likers-container-273544" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="273544"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-last-post cat-last-post" title="Last post!"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <span class="all-loaded">— All posts loaded —</span>
</div></template></turbo-stream>