1652103867
Fluent UI Web
π π π Version 8 of
@fluentui/react
is now available on npm! π π πSee the v8 release notes for more info, and please file an issue if you have any problems.
Fluent UI web represents a collection of utilities, React components, and web components for building web applications.
This repo is home to 3 separate projects today. Mixing components between projects is not currently supported. The goal of these projects is to dedupe functionality and enable interoperability over time. For now, choose the project that best suits your needs.
The following table will help you navigate the 3 projects and understand their differences.
React | React Northstar | Web Components | |
---|---|---|---|
Overview | Mature, refreshing with new concepts from react-northstar. | Newer, has concepts we're iterating on. | Web Component implementation of Fluent UI. |
Used By | Office | Teams | Edge |
Read Me | README.md | README.md | README.md |
Changelog | CHANGELOG.md | CHANGELOG.md | CHANGELOG.md |
Repo | ./packages/react | ./packages/fluentui/react-northstar | ./packages/web-components |
Quick Start | Quick Start | Quick Start | See README.md |
Docs | aka.ms/fluentui-react | aka.ms/fluentui-react-northstar | aka.ms/fluentui-web-components |
NPM | @fluentui/react | @fluentui/react-northstar | @fluentui/web-components |
Version | |||
Issues |
Why are there two React versions? See the FAQ on Fabric and Stardust.
You can view the complete list of additions, fixes, and changes in the CHANGELOG.md file for each package.
The Office UI Fabric React project has evolved to Fluent UI.
The office-ui-fabric-react
repo is now this repo (fluentui
in the Microsoft organization)! The name change should not disrupt any current Fabric usage, repo clones, pull requests or issue reporting. Links should redirect to the new location. The library formerly known as office-ui-fabric-react
is now available as @fluentui/react
(see above table for more information).
We have a lot in store for Fluent UI - Read our announcement here.
This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.
Author: microsoft
Source Code: https://github.com/microsoft/fluentui
License: View license
#react #javascript #typescript #microsoft
1598839687
If you are undertaking a mobile app development for your start-up or enterprise, you are likely wondering whether to use React Native. As a popular development framework, React Native helps you to develop near-native mobile apps. However, you are probably also wondering how close you can get to a native app by using React Native. How native is React Native?
In the article, we discuss the similarities between native mobile development and development using React Native. We also touch upon where they differ and how to bridge the gaps. Read on.
Letβs briefly set the context first. We will briefly touch upon what React Native is and how it differs from earlier hybrid frameworks.
React Native is a popular JavaScript framework that Facebook has created. You can use this open-source framework to code natively rendering Android and iOS mobile apps. You can use it to develop web apps too.
Facebook has developed React Native based on React, its JavaScript library. The first release of React Native came in March 2015. At the time of writing this article, the latest stable release of React Native is 0.62.0, and it was released in March 2020.
Although relatively new, React Native has acquired a high degree of popularity. The βStack Overflow Developer Survey 2019β report identifies it as the 8th most loved framework. Facebook, Walmart, and Bloomberg are some of the top companies that use React Native.
The popularity of React Native comes from its advantages. Some of its advantages are as follows:
Are you wondering whether React Native is just another of those hybrid frameworks like Ionic or Cordova? Itβs not! React Native is fundamentally different from these earlier hybrid frameworks.
React Native is very close to native. Consider the following aspects as described on the React Native website:
Due to these factors, React Native offers many more advantages compared to those earlier hybrid frameworks. We now review them.
#android app #frontend #ios app #mobile app development #benefits of react native #is react native good for mobile app development #native vs #pros and cons of react native #react mobile development #react native development #react native experience #react native framework #react native ios vs android #react native pros and cons #react native vs android #react native vs native #react native vs native performance #react vs native #why react native #why use react native
1652274000
π π π Version 8 of
@fluentui/react
is now available on npm! π π πSee the v8 release notes for more info, and please file an issue if you have any problems.
Fluent UI web represents a collection of utilities, React components, and web components for building web applications.
This repo is home to 3 separate projects today. Mixing components between projects is not currently supported. The goal of these projects is to dedupe functionality and enable interoperability over time. For now, choose the project that best suits your needs.
The following table will help you navigate the 3 projects and understand their differences.
React | React Northstar | Web Components | |
---|---|---|---|
Overview | Mature, refreshing with new concepts from react-northstar. | Newer, has concepts we're iterating on. | Web Component implementation of Fluent UI. |
Used By | Office | Teams | Edge |
Read Me | README.md | README.md | README.md |
Changelog | CHANGELOG.md | CHANGELOG.md | CHANGELOG.md |
Repo | ./packages/react | ./packages/fluentui/react-northstar | ./packages/web-components |
Quick Start | Quick Start | Quick Start | See README.md |
Docs | aka.ms/fluentui-react | aka.ms/fluentui-react-northstar | aka.ms/fluentui-web-components |
NPM | @fluentui/react | @fluentui/react-northstar | @fluentui/web-components |
Version | |||
Issues |
Why are there two React versions? See the FAQ on Fabric and Stardust.
All files on the Fluent UI React GitHub repository are subject to the MIT license. Please read the License file at the root of the project.
Usage of the fonts and icons referenced in Fluent UI React is subject to the terms of the assets license agreement.
You can view the complete list of additions, fixes, and changes in the CHANGELOG.md file for each package.
The Office UI Fabric React project has evolved to Fluent UI.
The office-ui-fabric-react
repo is now this repo (fluentui
in the Microsoft organization)! The name change should not disrupt any current Fabric usage, repo clones, pull requests or issue reporting. Links should redirect to the new location. The library formerly known as office-ui-fabric-react
is now available as @fluentui/react
(see above table for more information).
We have a lot in store for Fluent UI - Read our announcement here.
This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.
Author: microsoft
Source Code: https://github.com/microsoft/fluentui
License: View license
1678660557
React's core concept is the component, which is a self-contained block of code that manages its own state and can be reused throughout an application. In this article, we will discuss the basics of React components, their types, and how to create and use them effectively.
https://wp.me/peygZh-fx
#react #React #component #components #web-development #webdevelopers #javascript
1659074160
Kashmir is a Ruby DSL that makes serializing and caching objects a snap.
Kashmir allows you to describe representations of Ruby objects. It will generate hashes from these Ruby objects using the representation and dependency tree that you specify.
Kashmir::ActiveRecord
will also optimize and try to balance ActiveRecord
queries so your application hits the database as little as possible.
Kashmir::Caching
builds a dependency tree for complex object representations and caches each level of this tree separately. Kashmir will do so by creating cache views of each level as well as caching a complete tree. The caching engine is smart enough to fill holes in the cache tree with fresh data from your data store.
Combine Kashmir::Caching
+ Kashmir::ActiveRecord
for extra awesomeness.
For example, a Person
with name
and age
attributes:
class Person
include Kashmir
def initialize(name, age)
@name = name
@age = age
end
representations do
rep :name
rep :age
end
end
could be represented as:
{ name: 'Netto Farah', age: 26 }
Representing an object is as simple as:
include Kashmir
to the target class.# Add fields and methods you want to be visible to Kashmir
representations do
rep(:name)
rep(:age)
end
#represent
it.# Pass in an array with all the fields you want included
Person.new('Netto Farah', 26).represent([:name, :age])
=> {:name=>"Netto Farah", :age=>"26"}
Add this line to your application's Gemfile:
gem 'kashmir'
And then execute:
$ bundle
Kashmir is better described with examples.
Only whitelisted fields can be represented by Kashmir. This is done so sensitive fields (like passwords) cannot be accidentally exposed to clients.
class Recipe < OpenStruct
include Kashmir
representations do
rep(:title)
rep(:preparation_time)
end
end
Instantiate a Recipe
:
recipe = Recipe.new(title: 'Beef Stew', preparation_time: 60)
Kashmir automatically adds a #represent
method to every instance of Recipe
. #represent
takes an Array
with all the fields you want as part of your representation.
recipe.represent([:title, :preparation_time])
=> { title: 'Beef Stew', preparation_time: 60 }
You can represent any instance variable or method (basically anything that returns true
for respond_to?
).
class Recipe < OpenStruct
include Kashmir
representations do
rep(:title)
rep(:num_steps)
end
def num_steps
steps.size
end
end
Recipe.new(title: 'Beef Stew', steps: ['chop', 'cook']).represent([:title, :num_steps])
=> { title: 'Beef Stew', num_steps: 2 }
You can nest Kashmir objects to represent complex relationships between your objects.
class Recipe < OpenStruct
include Kashmir
representations do
rep(:title)
rep(:chef)
end
end
class Chef < OpenStruct
include Kashmir
representations do
base([:name])
end
end
When you create a representation, nest hashes to create nested representations.
netto = Chef.new(name: 'Netto Farah')
beef_stew = Recipe.new(title: 'Beef Stew', chef: netto)
beef_stew.represent([:title, { :chef => [ :name ] }])
=> {
:title => "Beef Stew",
:chef => {
:name => 'Netto Farah'
}
}
Not happy with this syntax? Check out Kashmir::DSL
or Kashmir::InlineDSL
for prettier code.
Are you tired of repeating the same fields over and over? You can create a base representation of your objects, so Kashmir returns basic fields automatically.
class Recipe
include Kashmir
representations do
base [:title, :preparation_time]
rep :num_steps
rep :chef
end
end
base(...)
takes an array with the fields you want to return on every representation of a given class.
brisket = Recipe.new(title: 'BBQ Brisket', preparation_time: 'a long time')
brisket.represent()
=> { :title => 'BBQ Brisket', :preparation_time => 'a long time' }
You can nest as many Kashmir objects as you want.
class Recipe < OpenStruct
include Kashmir
representations do
base [:title]
rep :chef
end
end
class Chef < OpenStruct
include Kashmir
representations do
base :name
rep :restaurant
end
end
class Restaurant < OpenStruct
include Kashmir
representations do
base [:name]
rep :rating
end
end
bbq_joint = Restaurant.new(name: "Netto's BBQ Joint", rating: '5 Stars')
netto = Chef.new(name: 'Netto', restaurant: bbq_joint)
brisket = Recipe.new(title: 'BBQ Brisket', chef: netto)
brisket.represent([
:chef => [
{ :restaurant => [ :rating ] }
]
])
=> {
title: 'BBQ Brisket',
chef: {
name: 'Netto',
restaurant: {
name: "Netto's BBQ Joint",
rating: '5 Stars'
}
}
}
Arrays of Kashmir objects work the same way as any other Kashmir representations. Kashmir will augment Array
with #represent
that will represent every item in the array.
class Ingredient < OpenStruct
include Kashmir
representations do
rep(:name)
rep(:quantity)
end
end
class ClassyRecipe < OpenStruct
include Kashmir
representations do
rep(:title)
rep(:ingredients)
end
end
omelette = ClassyRecipe.new(title: 'Omelette Du Fromage')
omelette.ingredients = [
Ingredient.new(name: 'Egg', quantity: 2),
Ingredient.new(name: 'Cheese', quantity: 'a lot!')
]
Just describe your Array
representations like any regular nested representation.
omelette.represent([:title, {
:ingredients => [ :name, :quantity ]
}
])
=> {
title: 'Omelette Du Fromage',
ingredients: [
{ name: 'Egg', quantity: 2 },
{ name: 'Cheese', quantity: 'a lot!' }
]
}
Kashmir::Dsl
Passing arrays and hashes around can be very tedious and lead to duplication. Kashmir::Dsl
allows you to create your own representers/decorators so you can keep your logic in one place and make way more expressive.
class Recipe < OpenStruct
include Kashmir
representations do
rep(:title)
rep(:num_steps)
end
end
class RecipeRepresenter
include Kashmir::Dsl
prop :title
prop :num_steps
end
All you need to do is include Kashmir::Dsl
in any ruby class. Every call to prop(field_name)
will translate directly into just adding an extra field in the representation array.
In this case, RecipeRepresenter
will translate directly to [:title, :num_steps]
.
brisket = Recipe.new(title: 'BBQ Brisket', num_steps: 2)
brisket.represent(RecipePresenter)
=> { title: 'BBQ Brisket', num_steps: 2 }
It is also possible to define nested representers with embed(:property_name, RepresenterClass)
.
class RecipeWithChefRepresenter
include Kashmir::Dsl
prop :title
embed :chef, ChefRepresenter
end
class ChefRepresenter
include Kashmir::Dsl
prop :full_name
end
Kashmir will inline these classes and return a raw Kashmir description.
RecipeWithChefRepresenter.definitions == [ :title, { :chef => [ :full_name ] }]
=> true
Representing the objects will work just as before.
chef = Chef.new(first_name: 'Netto', last_name: 'Farah')
brisket = Recipe.new(title: 'BBQ Brisket', chef: chef)
brisket.represent(RecipeWithChefRepresenter)
=> {
title: 'BBQ Brisket',
chef: {
full_name: 'Netto Farah'
}
}
You don't necessarily need to define a class for every nested representation.
class RecipeWithInlineChefRepresenter
include Kashmir::Dsl
prop :title
inline :chef do
prop :full_name
end
end
Using inline(:property_name, &block)
will work the same way as embed
. Except that you can now define short representations using ruby blocks. Leading us to our next topic.
Kashmir::InlineDsl
Kashmir::InlineDsl
sits right in between raw representations and Representers. It reads much better than arrays of hashes and provides the expressiveness of Kashmir::Dsl
without all the ceremony.
It works with every feature from Kashmir::Dsl
and allows you to define quick inline descriptions for your Kashmir
objects.
class Recipe < OpenStruct
include Kashmir
representations do
rep(:title)
rep(:num_steps)
end
end
Just call #represent_with(&block)
on any Kashmir
object and use the Kashmir::Dsl
syntax.
brisket = Recipe.new(title: 'BBQ Brisket', num_steps: 2)
brisket.represent_with do
prop :title
prop :num_steps
end
=> { title: 'BBQ Brisket', num_steps: 2 }
You can nest inline representations using inline(:field, &block)
the same way we did with Kashmir::Dsl
.
class Ingredient < OpenStruct
include Kashmir
representations do
rep(:name)
rep(:quantity)
end
end
class ClassyRecipe < OpenStruct
include Kashmir
representations do
rep(:title)
rep(:ingredients)
end
end
omelette = ClassyRecipe.new(title: 'Omelette Du Fromage')
omelette.ingredients = [
Ingredient.new(name: 'Egg', quantity: 2),
Ingredient.new(name: 'Cheese', quantity: 'a lot!')
]
Just call #represent_with(&block)
and start nesting other inline representations.
omelette.represent_with do
prop :title
inline :ingredients do
prop :name
prop :quantity
end
end
=> {
title: 'Omelette Du Fromage',
ingredients: [
{ name: 'Egg', quantity: 2 },
{ name: 'Cheese', quantity: 'a lot!' }
]
}
Inline representations can become lengthy and confusing over time. If you find yourself nesting more than two levels or including more than 3 or 4 fields per level consider creating Representers with Kashmir::Dsl
.
Kashmir::ActiveRecord
Kashmir works just as well with ActiveRecord. ActiveRecord::Relation
s can be used as Kashmir representations just as any other classes.
Kashmir will attempt to preload every ActiveRecord::Relation
defined as representations automatically by using ActiveRecord::Associations::Preloader
. This will guarantee that you don't run into N+1 queries while representing collections and dependent objects.
Here's an example of how Kashmir will attempt to optimize database queries:
ActiveRecord::Schema.define do
create_table :recipes, force: true do |t|
t.column :title, :string
t.column :num_steps, :integer
t.column :chef_id, :integer
end
create_table :chefs, force: true do |t|
t.column :name, :string
end
end
module AR
class Recipe < ActiveRecord::Base
include Kashmir
belongs_to :chef
representations do
rep :title
rep :chef
end
end
class Chef < ActiveRecord::Base
include Kashmir
has_many :recipes
representations do
rep :name
rep :recipes
end
end
end
AR::Chef.all.each do |chef|
chef.recipes.to_a
end
will generate
SELECT * FROM chefs
SELECT "recipes".* FROM "recipes" WHERE "recipes"."chef_id" = ?
SELECT "recipes".* FROM "recipes" WHERE "recipes"."chef_id" = ?
With Kashmir:
AR::Chef.all.represent([:recipes])
SELECT "chefs".* FROM "chefs"
SELECT "recipes".* FROM "recipes" WHERE "recipes"."chef_id" IN (1, 2)
For more examples, check out: https://github.com/IFTTT/kashmir/blob/master/test/activerecord_tricks_test.rb
Kashmir::Caching
(Experimental)Caching is the best feature in Kashmir. The Kashmir::Caching
module will cache every level of the dependency tree Kashmir generates when representing an object.
As you can see in the image above, Kashmir will build a dependency tree of the representation. If you have Caching on, Kashmir will:
Each layer gets its own cache keys which can be expired at different times. Kashmir will also be able to fill in blanks in the dependency tree and fetch missing objects individually.
Caching is turned off by default, but you can use one of the two available implementations.
You can also build your own custom caching engine by following the NullCaching
protocol available at: https://github.com/IFTTT/kashmir/blob/master/lib/kashmir/plugins/null_caching.rb
Kashmir::Caching
In Memory
Kashmir.init(
cache_client: Kashmir::Caching::Memory.new
)
With Memcached
require 'kashmir/plugins/memcached_caching'
client = Dalli::Client.new(url, namespace: 'kashmir', compress: true)
default_ttl = 5.minutes
Kashmir.init(
cache_client: Kashmir::Caching::Memcached.new(client, default_ttl)
)
For more advanced examples, check out: https://github.com/IFTTT/kashmir/blob/master/test/caching_test.rb
git checkout -b my-new-feature
)git commit -am 'Add some feature'
)git push origin my-new-feature
)Author: IFTTT
Source code: https://github.com/IFTTT/kashmir
License: MIT license
1651604400
React Starter Kit is an opinionated boilerplate for web development built on top of Node.js, Express, GraphQL and React, containing modern web development tools such as Webpack, Babel and Browsersync. Helping you to stay productive following the best practices. A solid starting point for both professionals and newcomers to the industry.
See getting started guide, demo, docs, roadmap | Join #react-starter-kit chat room on Gitter | Visit our sponsors:
The master
branch of React Starter Kit doesn't include a Flux implementation or any other advanced integrations. Nevertheless, we have some integrations available to you in feature branches that you can use either as a reference or merge into your project:
master
)feature/redux
)feature/apollo
)master
)You can see status of most reasonable merge combination as PRs labeled as TRACKING
If you think that any of these features should be on master
, or vice versa, some features should removed from the master
branch, please let us know. We love your feedback!
React Starter Kit
| React Static Boilerplate
| ASP.NET Core Starter Kit
| |
---|---|---|---|
App type | Isomorphic (universal) | Single-page application | Single-page application |
Frontend | |||
Language | JavaScript (ES2015+, JSX) | JavaScript (ES2015+, JSX) | JavaScript (ES2015+, JSX) |
Libraries | React, History, Universal Router | React, History, Redux | React, History, Redux |
Routes | Imperative (functional) | Declarative | Declarative, cross-stack |
Backend | |||
Language | JavaScript (ES2015+, JSX) | n/a | C#, F# |
Libraries | Node.js, Express, Sequelize, GraphQL | n/a | ASP.NET Core, EF Core, ASP.NET Identity |
SSR | Yes | n/a | n/a |
Data API | GraphQL | n/a | Web API |
β₯ React Starter Kit? Help us keep it alive by donating funds to cover project expenses via OpenCollective or Bountysource!
Anyone and everyone is welcome to contribute to this project. The best way to start is by checking our open issues, submit a new issue or feature request, participate in discussions, upvote or downvote the issues you like or dislike, send pull requests.
Copyright Β© 2014-present Kriasoft, LLC. This source code is licensed under the MIT license found in the LICENSE.txt file. The documentation to the project is licensed under the CC BY-SA 4.0 license.
Author: kriasoft
Source Code: https://github.com/kriasoft/react-starter-kit
License: MIT License