import React from 'react'
import ReactDOM from 'react-dom'
import App from './app.js'
import { Store, Provider } from 'smox'
const state = {
count: 0
}
const actions = {
up(state) {
state.count++
},
down(state) {
state.count--
}
}
const effects = {
async upAsync(actions) {
await new Promise(t => setTimeout(t, 1000))
actions.up()
}
}
const store = new Store({ state, actions, effects })
ReactDOM.render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById('root')
)
import React from 'react'
import { map } from 'smox'
@map({
state: ['count'],
actions: ['up', 'down'],
effects: ['upAsync']
})
class App extends React.Component {
render() {
return (
<div>
<h1>现在是{this.props.count}</h1>
<button onClick={this.props.up}>加一</button>
<button onClick={this.props.down}>减一</button>
<button onClick={this.props.upAsync}>异步加一</button>
</div>
)
}
}
export default App
const state = {
counter:{
count: 0
}
}
const actions = {
counter: {
up(state, data) {
state.count += data
},
down(state, data) {
state.count -= data
}
}
}
@map({
state:['counter/count'],
actions:['counter/up','counter/down']
})
github 地址:https://github.com/132yse/smox/