让我解释一下此代码的结果,以便轻松地询问我的问题。
const ForExample = () => {
const [name, setName] = useState('');
const [username, setUsername] = useState('');
useEffect(() => {
console.log('effect');
console.log({
name,
username
});
return () => {
console.log('cleaned up');
console.log({
name,
username
});
};
}, [username]);
const handleName = e => {
const { value } = e.target;
setName(value);
};
const handleUsername = e => {
const { value } = e.target;
setUsername(value);
};
return (
<div>
<div>
<input value={name} onChange={handleName} />
<input value={username} onChange={handleUsername} />
</div>
<div> …Run Code Online (Sandbox Code Playgroud) 如果要限制useEffect仅在组件安装时运行,则可以添加useEffectwith的第二个参数[]。
useEffect(() => {
// ...
}, []);
Run Code Online (Sandbox Code Playgroud)
但是,如何使useEffect该组件仅在组件被更新(除了初始安装)的那一刻才运行?
我在 stackoverflow 中阅读了很多文章,也看过很多 youtube 视频,但没有找到演示将 jwt 保存到 localstorage的流程的示例代码- 使用授权标头发送回服务器以验证.
这是我想要做的。
当客户端登录到服务器时,服务器给出令牌并将其保存到客户端localStorage(或sessionStorage)。
每当客户端调用只能使用令牌访问的 api 时,客户端从 取回令牌localStorage,并将该令牌与授权标头(req.headers.[x-access-token]或req.headers.[authorization])一起发送到服务器。
但是我读过的所有文章都在用邮递员解释这个问题,邮递员没有说明如何将其存储到localStorage授权标头中。
我是否必须localStorage.setItem在服务器将令牌提供给客户端时使用,localStorage.getItem并在将该令牌发送回服务器之前使用 and和new Headers()withappend()或axios之前使用?
示例不必针对快速用户,但我想了解一下想法。
根据 react 文档,renderToString()创建了 React 内部使用的额外 DOM 属性,例如 data-reactroot 而renderToStaticMarkup不会。
而且我认为这ReactDOM.hydrate()使事件处理程序能够附加到通过字符串呈现的标记renderToString(),这要归功于额外的 DOM 属性,例如 data-reactroot。
但我自己测试过,它ReactDOM.hydrate()也适用于通过 呈现的静态标记renderToStaticMarkup(),这意味着组合ReactDOM.hydrate并renderToStaticMarkup()成功地将事件处理程序附加到字符串呈现的 DOM。
根据Dan Abramov 的问题,hydrate()不依赖于内部反应属性(data-reactroot)
相反,使用 hydrate() 明确告诉 React 对现有 HTML 进行水合。那么它不会取决于 data-reactroot 是否存在。
所以我可能猜测使用renderToStaticMarkup()而不是总是更好renderToString(),因为性能会通过以下方式得到更好的优化renderToStaticMarkup()
ReactDOM.renderToString()在 React v16 上发布 hydr() 之前,这只是一种旧方法,只能与render()and一起使用dangerouslySetInnerHTML()吗?
我认为我们总是可以使用renderToStaticMarkup()over 可以renderToString()吗?
这个问题与我的问题有关,但还没有明确的答案。
我读过很多文章说会话违反了无状态性REST。
如果用户登录服务器,服务器会将会话cookie(ssid)提供给客户端,并将会话数据(用户数据)存储在服务器中,在本例中为内存。
它违反了无国籍状态,这是有道理的。
但是会话存储在数据库中怎么样?
如果用户登录服务器,服务器将会话cookie( ssid)提供给客户端,并将会话数据存储在mysql数据库中,而不是存储在内存中。
这是否也违反了无国籍状态?
如果是这样,“会话存储在数据库中”和“用户请求正在查询数据库数据”有什么区别?
当客户端发出请求时,它们都从数据库中提取一些数据。
显然,后者并不违反无状态性,否则REST建筑永远不会如此受欢迎。
我之前的问题,关于数据库的 RESTful 违规,回答者说“它没有违规”
反之亦然,会话真的违反了 RESTful 吗?回答者说“是的,这是违规的”。但该答案可能绑定到唯一的服务器端(内存)。
如此迷茫。