Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Subscriptions能否补充一些例子或者文档呢? #174

Closed
luoyjx opened this issue Oct 19, 2016 · 17 comments
Closed

Subscriptions能否补充一些例子或者文档呢? #174

luoyjx opened this issue Oct 19, 2016 · 17 comments
Labels

Comments

@luoyjx
Copy link

luoyjx commented Oct 19, 2016

数据源可以是当前的时间、服务器的 websocket 连接、keyboard 输入、geolocation 变化、history 路由变化等等。

木有明白这setup、keyEvent是从哪来的,如果websocket或者其他的什么该怎么写。

@sorrycc
Copy link
Member

sorrycc commented Oct 19, 2016

setup 和 keyEvent 是 key,暂时没有用途,可以是任意的字符串。

@luoyjx
Copy link
Author

luoyjx commented Oct 20, 2016

那就是说,这个key只是用于帮助开发者自己标记此处是某一类功能,只是传入dispatch和history,而具体的监听代码是需要具体的第三方库来实现监听的。

我的理解是否是正确的呢?

@sorrycc
Copy link
Member

sorrycc commented Oct 20, 2016

是的,这里用 key/value 的格式,目前主要是为了和 effects 和 reducers 保持格式一致,之后会支持 subscriptions 取消的功能,key 就会用上了。

@luoyjx
Copy link
Author

luoyjx commented Oct 20, 2016

了解了,谢谢。
不过我觉得可以在这几个文档里添加以上讨论中的含义,可能会遇到和我一样的问题呢:)

@luoyjx luoyjx closed this as completed Oct 20, 2016
@roc2539
Copy link

roc2539 commented Nov 20, 2016

subscriptions 只是定义了一个地方,用来订阅数据。 然后会传递dispatch和history,具体要怎么订阅或是监听都需要第三方的类库来实现。是这么理解吗? dispatch 是redux的store中的dispatch ,history是 react-router中的history,是这么理解吗?

@sorrycc
Copy link
Member

sorrycc commented Nov 20, 2016

@roc2539 是的。

@gzbigegg
Copy link

gzbigegg commented Feb 6, 2017

subscriptions 里的 setup 中如果要访问 state 或者 props 的内容可以吗?

@sorrycc
Copy link
Member

sorrycc commented Feb 7, 2017

@gzbigegg 不可以,触发 action 让 effect 去处理。

@whwnow
Copy link

whwnow commented Jun 2, 2017

subscriptions: {
    setup ({ dispatch }) {
      dispatch({ type: 'query' })
    }
}

有两个疑问,不知道是否正确,文档里说得elm一直没接触过,对subscriptions理解的不是很清楚。

  1. 传入history,执行history.listen后,会在路由变化时触发,不知道理解是否正确。
  2. 只传入dispatch的订阅,都会在什么时候被触发?

@derekgray23
Copy link

很希望看到一些websocket之类的subscription example

@maclaren0920
Copy link

在setup中如何disptch两个action呢

@yangbin1994
Copy link
Contributor

subscription 注册的回调 调用时机 和 注入参数 没有明确的文档 @roc2539 可以解答一下吗?

@terminalqo
Copy link

terminalqo commented Dec 5, 2017

改成hash路由之后,setup无法监听到来自键盘输入的url的变化。
而使用 browserHistory 则可以。

 setup ({ dispatch }) {
      console.log('models-app') // 手动改变url地址,不会进此方法
      dispatch({ type: 'query' })
      
    },

@Lzzzzzq
Copy link

Lzzzzzq commented Dec 22, 2017

尝试了一下socket,仅供参考。

// model

import * as service from '../services/socket';

subscriptions: {
    socket({dispatch}){ // socket相关
        return service.listen(data => {
            switch (data.type) {
                case 'connect':
                    if (data.state === 'success') {
                        dispatch({
                            type: 'connectSuccess'
                        })
                    } else {
                        dispatch({
                            type: 'connectFail'
                        })
                    }
                    break;
                case 'welcome':
                    dispatch({
                        type: 'welcome'
                    });
                    break;
            }
        })
    }
},

// services

import io from 'socket.io-client';

let socket = '';

export function listen(action) {
    if (socket === '') {
        try {
            socket = io("localhost:3000");
            action({
                type: 'connect',
                state: 'success'
            });
        } catch (err) {
            action({
                type: 'connect',
                state: 'fail'
            });
        }
    }
    socket.on('welcome', () => {
        action({
            type: 'welcome'
        })
    })
}

@chocking
Copy link

chocking commented Mar 6, 2019

服了 一直在找到底怎么触发一个指定key的subscription,原来初始化的时候全都都会执行一遍的,所以这个subscriptions只是提供了dispatch和history的闭包而已😄

@leaez
Copy link

leaez commented Apr 12, 2019

subscriptions: {
setup ({ dispatch }) {
dispatch({ type: 'query' })
}
} 这里只是初始时候执行一个dispatch动作而已, 实际并不做订阅动作。

@chuiliu
Copy link

chuiliu commented Dec 2, 2019

恍然大悟

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests