我知道你可以将所有的反应组件道具传递给它的子组件,如下所示:
const ParentComponent = () => (
<div>
<h1>Parent Component</h1>
<ChildComponent {...this.props} />
</div>
)
Run Code Online (Sandbox Code Playgroud)
但是,如果子组件是无状态的,那么如何检索这些道具呢?我知道如果它是一个类组件,你可以只访问它们this.prop.whatever,但是你将什么作为参数传递给无状态组件?
const ChildComponent = ({ *what goes here?* }) => (
<div>
<h1>Child Component</h1>
</div>
)
Run Code Online (Sandbox Code Playgroud) 在阅读了关于REST的介绍性文章(Fielding的论文和其他)后,我对无状态的看法是服务器端不应该有会话对象.然而,我看到Flask(以及我不知道的不同技术中的其他REST框架)为我们提供了一个会话对象,用于在此示例中在服务器上存储信息:
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
session['username'] = request.form['username']
return redirect(url_for('index'))
...
Run Code Online (Sandbox Code Playgroud)
当然,我误解了REST的无国籍状态.那么,它真的是什么?
使用单个随机数发生器(RNG)生成多个数字与每个发生器生成一个数字并丢弃它之间有区别吗?这两种实现都会产生同等随机的数字吗?普通RNG和安全RNG之间是否存在差异?
我有一个Web应用程序,应该代表客户生成一个随机数列表.也就是说,从每个客户的角度来看,数字应该是随机的.这是否意味着我需要为每个客户会话保留一个单独的随机RNG?或者我可以在所有会话中共享一个RNG吗?或者我可以根据请求创建和丢弃RNG吗?
更新:这个问题与随机序列的子集是否也是随机的有关?
我经常听到"无国籍"和"不可改变"这个词.例如,HTTP是无状态协议,String对象是不可变对象.但我很难掌握两者之间的差异.当我创建无状态对象时,它不会在内部存储任何"状态"数据.如果我创建一个Immutable对象,它意味着它永远不会改变.
这是不是意味着同样的事情?
由于不可变对象不会改变,因此根据定义它不能具有状态.它永远是它.如果一个对象没有状态,则不能进行变异(根据定义).因此,并非所有无状态对象都是不可变和不可变对象无状态的吗?
什么可以是可变无状态对象或不可变状态对象的示例?
我有以下组件:
// Hello.js
export default (React) => ({name}) => {
return (
<div>
Hello {name ? name : 'Stranger'}!
</div>
)
}
// App.js
import createHello from './Hello'
export default (React) => () => {
const Hello = createHello(React)
const helloProps = {
name: 'Jane'
}
return (
<Hello { ...helloProps } />
)
}
// index.js
import React from 'react'
import { render } from 'react-dom'
import createApp from './App'
const App = createApp(React)
render(
<App />,
document.getElementById('app')
) …Run Code Online (Sandbox Code Playgroud) 我见过这个建议......
理想情况下,Web应遵循REST原则并完全无状态.因此,单个URL应标识单个资源,而不必保留每个用户的导航历史记录.
...我读了维基百科页面http://en.wikipedia.org/wiki/REST,这听起来不错,但我不知道如何实际实现它.我在ASP .NET Webforms NOT MVC工作.
例如,在我即将构建的应用程序中 - 我需要我的用户登录才允许他们做任何事情.在他们被允许做很多有用之前,他们必须跳过几个箍 - 比如接受T和C并确认他们的基本细节不变.最后他们被允许做他们真正想要的东西,比如BuyAProduct!
在我看来(我来自Rich客户端的HEAVILY有状态世界),我需要状态来记录他们所做的事情并从中推断他们可以做什么.我不知道如何支持他们(比如)为BuyAProduct URI添加书签.当他们到达书签时,我如何知道他们是否已登录,以及他们是否同意T和C以及他们是否尽职尽责地检查了他们的基本细节?
我喜欢应用程序无状态的想法,部分原因是它似乎完全解决了"当用户点击后退和前进按钮时,我该怎么办?" 我看不出我怎么能让它正常工作.我觉得我错过了一些非常基本的东西.
我相信RESTful API的最佳实践是无状态.我读过关于无状态身份验证的abit,但我不完全清楚如何实现它(看起来像一堆令牌等).PassportJS是一个很好的身份验证库,但它不是无状态的?是否有某种库可以帮助我创建无状态API(带身份验证)?我想使用像谷歌,Twitter等一样的SSO(单点登录),所以如果图书馆为我处理这个(就像PassportJS那样)会很好.
想象一个更复杂的CRUD应用程序,它具有三层架构并通过Web服务进行通信.客户端开始与服务器的对话,并做一些像向导一样的向导.要处理向导,客户端需要服务器提供的反馈.
我们开始讨论这种方法的有状态或无状态Web服务.我结合自己的经验做了一些研究,这让我想到了后面提到的问题.
具有以下属性的无状态Web服务(在我们的示例中):
+ high scalability
+ high availability
+ high speed
+ rapid testing
- bloated contract
- implementing more logic on server-side
Run Code Online (Sandbox Code Playgroud)
但是我们可以划掉前两点,我们的应用程序不需要高可伸缩性和可用性.
所以我们来到有状态的网络服务.我已经阅读了大量的博客和论坛帖子,实现有状态网络服务的最发明点是:
+ simplifies contract (protocol)
- bad testing
- runs counter to the basic architecture of http
Run Code Online (Sandbox Code Playgroud)
但几乎所有的Web应用程序都没有这些坏点吗?Web应用程序使用cookie,查询字符串,会话ID和所有内容来避免http的无状态.
那么为什么网络服务不好呢?
我已经和Wicket合作了一两个月,用它制作简单的Web应用程序并习惯模型等等.现在我想继续前进,看看我是否可以将迄今为止学到的东西用于创建中/大型Web应用程序.但是,我没有花太多时间思考如何使页面无状态.
如果我理解正确的话,通过使页面可书签并确保没有向页面添加有状态组件来实现创建无状态页面.
对于我正在制作的网站,我想避免"页面过期"消息,让用户通过cookie登录,无需登录/创建会话即可创建大量内容,我希望分页等功能成为可能无国籍和可收藏.
这对于例如PHP来说没有问题,但在我看来,很多有用的Wicket组件都是有状态的.我是否参与了很多工作,比如创建我自己的无状态组件,或者它没什么大不了的?
我希望有人能指出我正确的方向来帮助我.
编辑:让我们说我想写一个博客.如果用户决定阅读文章2小时然后尝试通过例如分页进一步导航,则应该可以浏览帖子,类别等,而不必担心页面将过期.我希望允许用户一次保持登录一个月,但我并不想将他们的会话存储一个月.
我非常感谢任何有关如何使用Wicket完成我刚才描述的内容的帮助.
我将用它实现OAuth 2.0和REST API
为每个用户授予不同的权限,并且还可以很好地扩展.
为了更好地扩展,无国籍更容易,因为有
没有文件,数据库,基于内存的会话.
以下是我对OAuth 2的理解.
所以我不必担心会话存储.对?
stateless ×10
rest ×3
reactjs ×2
asp.net ×1
components ×1
enzyme ×1
flask ×1
immutability ×1
java ×1
javascript ×1
node.js ×1
oauth ×1
oauth-2.0 ×1
passport.js ×1
prng ×1
python ×1
random ×1
session ×1
stateful ×1
testing ×1
unit-testing ×1
web-services ×1
webforms ×1
wicket ×1