Razor is really quite different from React.<p>Razor seems to have been born out of a frustration someone had with writing<p><pre><code>  return &quot;&lt;div&gt;&quot; + model.name + &quot;&lt;&#x2F;div&gt;&quot;;
</code></pre>
Razor is basically a DSL for C# string concatenation, where everything not escaped with an @ is a string literal to be concatenated. This means it&#x27;s fairly unopinionated about structuring code. React, on the other hand, forces you to define components- ideally, pure functions from properties to JSX (which is just sugar for JS). This means composition is the default solution to everything. Razor doesn&#x27;t place nearly as much emphasis on composable components, and the mechanisms it has for doing so, like helpers or calls to RenderPartial, are clunky and worlds away from the first-class component support of React.<p>While it&#x27;s technically possible to write Razor code with a React-style focus on composition, the syntax and architecture of viewmodels&#x2F;templates actively pushes you away from doing so. In my experience, most Razor ends up like a C# translation of PHP, and I think that&#x27;s really the paradigm Razor inherited. Razor has been around since 2011, which significantly predates the Cambrian explosion of clientside js frameworks, so it makes sense.