[dva](https://github.com/dvajs/dva) is a React and redux based, lightweight and elm-style framework, which supports side effects, hot module replacement, dynamic on demand, react-native, SSR. And it has been widely used in production environment.
This article will guide you to create a simple application from zero using dva and antd.
After installed dva-cli, you can have access to the `dva` command in terminal. Now, create a new application with `dva new`.
```bash
$ dva new dva-quickstart
```
This creates `dva-quickstart` directory, that contains the project directories and files, and provides development server, build script, mock service, proxy server and so on.
Then `cd` the `dva-quickstart` directory, and start the development server.
Install `antd` and `babel-plugin-import` with npm. `babel-plugin-import` is used to automatically import scripts and stylesheets from antd in demand. See [repo](https://github.com/ant-design/babel-plugin-import) 。
> Notice: dva-cli's build and server is bases on roadhog, view [roadhog#Configuration](https://github.com/sorrycc/roadhog/blob/master/README_en-us.md#configuration) for more `.roadhogrc` Configuration.
Then open http://localhost:8989/#/products in your browser, you should be able to see the `<h2>` tag defined before.
## Write UI Components
As your application grows and you notice you are sharing UI elements between multiple pages (or using them multiple times on the same page), in dva it's called reusable components.
Let's create a `ProductList` component that we can use in multiple places to show a list of products.
After complete the UI, we will begin processing the data and logic.
dva manages domain model with `model`, with reducers for synchronous state update, effects for async logic, and subscriptions for data source subscribe.
Let's create a model `models/products.js` and typing:
```javascript
import dva from 'dva';
export default {
namespace: 'products',
state: [],
reducers: {
'delete'(state, { payload: id }) {
return state.filter(item => item.id !== id);
},
},
};
```
In this model:
-`namespace` represent the key on global state
-`state` is the initial value, here is an empty array
-`reducers` is equal to reducer in redux, accepting action, and update state synchronously
Now that we've written our application and verified that it works in development, it's time to get it ready to deploy to our users. To do so, run the following command:
```bash
$ npm run build
```
After a few seconds, the output should be as follows:
The `build` command packages up all of the assets that make up your application —— JavaScript, templates, CSS, web fonts, images, and more. Then you can find these files in the `dist /` directory.
## What's Next
We have completed a simple application, but you may still have lots of questions, such as: