diff --git a/src/BlazorUI/Bit.BlazorUI.SourceGenerators/Component/ComponentSourceGenerator.cs b/src/BlazorUI/Bit.BlazorUI.SourceGenerators/Component/ComponentSourceGenerator.cs
index 7a67744444..dd4c9f0811 100644
--- a/src/BlazorUI/Bit.BlazorUI.SourceGenerators/Component/ComponentSourceGenerator.cs
+++ b/src/BlazorUI/Bit.BlazorUI.SourceGenerators/Component/ComponentSourceGenerator.cs
@@ -35,6 +35,7 @@ private static string GeneratePartialClass(INamedTypeSymbol classSymbol, List<Bl
         var className = GetClassName(classSymbol);
         var twoWayParameters = parameters.Where(p => p.IsTwoWayBound).ToArray();
         var isBaseTypeComponentBase = classSymbol.BaseType?.ToDisplayString() == "Microsoft.AspNetCore.Components.ComponentBase";
+        var doesSupporteParametersViewCache = InheritsFromBitComponentBase(classSymbol);
 
         StringBuilder builder = new StringBuilder($@"using System;
 using System.Threading.Tasks;
@@ -62,7 +63,14 @@ public override Task SetParametersAsync(ParameterView parameters)
         {
             builder.AppendLine($"            {par.PropertySymbol.Name}HasBeenSet = false;");
         }
-        builder.AppendLine("            var parametersDictionary = parameters.ToDictionary() as Dictionary<string, object>;");
+        if (doesSupporteParametersViewCache)
+        {
+            builder.AppendLine("            var parametersDictionary = (ParametersCache ??= parameters.ToDictionary() as Dictionary<string, object>);");
+        }
+        else
+        {
+            builder.AppendLine("            var parametersDictionary = parameters.ToDictionary() as Dictionary<string, object>;");
+        }
         builder.AppendLine("            foreach (var parameter in parametersDictionary!)");
         builder.AppendLine("            {");
         builder.AppendLine("                switch (parameter.Key)");
@@ -117,7 +125,14 @@ public override Task SetParametersAsync(ParameterView parameters)
         }
         else
         {
-            builder.AppendLine("            return base.SetParametersAsync(ParameterView.FromDictionary(parametersDictionary as IDictionary<string, object?>));");
+            if (doesSupporteParametersViewCache)
+            {
+                builder.AppendLine("            return base.SetParametersAsync(ParameterView.Empty);");
+            }
+            else
+            {
+                builder.AppendLine("            return base.SetParametersAsync(ParameterView.FromDictionary(parametersDictionary as IDictionary<string, object?>));");
+            }
         }
         builder.AppendLine(@"        }");
 
@@ -171,4 +186,18 @@ private static string GetClassName(INamedTypeSymbol classSymbol)
 
         return sbName.ToString();
     }
+
+    private static bool InheritsFromBitComponentBase(INamedTypeSymbol? typeSymbol)
+    {
+        if (typeSymbol is null)
+            return false;
+
+        if (typeSymbol.TypeKind is not TypeKind.Class)
+            return false;
+
+        if (typeSymbol.Name == "BitComponentBase")
+            return true;
+
+        return InheritsFromBitComponentBase(typeSymbol.BaseType);
+    }
 }
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/BitComponentBase.cs b/src/BlazorUI/Bit.BlazorUI/Components/BitComponentBase.cs
index c83656cb16..3f496563bf 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/BitComponentBase.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/BitComponentBase.cs
@@ -74,11 +74,11 @@ public BitDir? Dir
     [Parameter] public BitVisibility Visibility { get; set; }
 
 
-
+    internal protected Dictionary<string, object?>? ParametersCache { get; set; }
     public override Task SetParametersAsync(ParameterView parameters)
     {
         HtmlAttributes.Clear();
-        var parametersDictionary = parameters.ToDictionary() as Dictionary<string, object>;
+        var parametersDictionary = ParametersCache ?? throw new InvalidOperationException();
         foreach (var parameter in parametersDictionary!)
         {
             switch (parameter.Key)
@@ -140,6 +140,9 @@ public override Task SetParametersAsync(ParameterView parameters)
                     break;
             }
         }
+
+        ParametersCache = null;
+
         return base.SetParametersAsync(ParameterView.Empty);
     }
 
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Inputs/BitInputBase.cs b/src/BlazorUI/Bit.BlazorUI/Components/Inputs/BitInputBase.cs
index 0b16216f6c..4af592ff56 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Inputs/BitInputBase.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Inputs/BitInputBase.cs
@@ -139,7 +139,7 @@ public override Task SetParametersAsync(ParameterView parameters)
     {
         ValueHasBeenSet = false;
 
-        var parametersDictionary = parameters.ToDictionary() as Dictionary<string, object>;
+        var parametersDictionary = (ParametersCache ??= parameters.ToDictionary() as Dictionary<string, object?>);
 
         foreach (var parameter in parametersDictionary!)
         {
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Inputs/BitTextInputBase.cs b/src/BlazorUI/Bit.BlazorUI/Components/Inputs/BitTextInputBase.cs
index b4c4dc61b5..5874799e25 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Inputs/BitTextInputBase.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Inputs/BitTextInputBase.cs
@@ -40,7 +40,7 @@ public abstract class BitTextInputBase<TValue> : BitInputBase<TValue>
 
     public override Task SetParametersAsync(ParameterView parameters)
     {
-        var parametersDictionary = parameters.ToDictionary() as Dictionary<string, object>;
+        var parametersDictionary = (ParametersCache ??= parameters.ToDictionary() as Dictionary<string, object?>); ;
 
         foreach (var parameter in parametersDictionary!)
         {
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Progress/Loading/Base/BitLoadingBase.cs b/src/BlazorUI/Bit.BlazorUI/Components/Progress/Loading/Base/BitLoadingBase.cs
index 5b774859de..fcce59ccf0 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Progress/Loading/Base/BitLoadingBase.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Progress/Loading/Base/BitLoadingBase.cs
@@ -56,7 +56,7 @@ public abstract class BitLoadingBase : BitComponentBase
 
     public override Task SetParametersAsync(ParameterView parameters)
     {
-        var parametersDictionary = parameters.ToDictionary() as Dictionary<string, object>;
+        var parametersDictionary = (ParametersCache ??= parameters.ToDictionary() as Dictionary<string, object?>);
 
         foreach (var parameter in parametersDictionary!)
         {