我在驯服Redux Forms时遇到了麻烦.
我有以下表格和字段.如果我只是添加正确的数据并提交,这似乎有效,但如果我尝试导致验证错误并重新输入数据几次,它有时会以无限循环结束.
无限循环是重复调用action @@redux-form/REGISTER_FIELD并action @@redux-form/UNREGISTER_FIELD最终导致以下错误.
未捕获错误:超出最大更新深度.当组件在componentWillUpdate或componentDidUpdate中重复调用setState时,可能会发生这种情况.React限制嵌套更新的数量以防止无限循环.
任何人都可以帮助我理解可能导致这种情况的原因以及我可以采取哪些步骤来使其正常工作?
ContactPage.js
import React, {Component} from 'react';
import ContactForm from './contact-form';
class ContactPage extends Component {
submit = values => {
console.log(values);
};
render() {
return (
<div>
<ContactForm onSubmit={this.submit}/>
</div>
);
}
}
export default ContactPage;
Run Code Online (Sandbox Code Playgroud)
ContactForm.js
import React from 'react';
import {Field, reduxForm} from 'redux-form';
import {isEmail, isRequired, maxLength} from '../validation';
import {Input, Select, TextArea} from './form-elements';
let ContactForm = ({handleSubmit}) =>
<form onSubmit={handleSubmit}>
<div>
<Field name="fullname" …Run Code Online (Sandbox Code Playgroud) 我希望能够在 API 中引发验证和其他异常,并在包装视图中捕获它们,该视图将以 JSON 形式返回错误消息。
我想我可以使用这样的东西:
class APIException(Exception):
def __init__(self, message, status_code=406):
super().__init__(message)
self.status_code = status_code
Run Code Online (Sandbox Code Playgroud)
# Todo: find a better way of handling this. Flask should have some way of handling exceptions better than this
def catch_errors(view):
@functools.wraps(view)
def wrapped_view(**kwargs):
try:
return view(**kwargs)
except APIException as e:
# It seems to hit here
return json_response({'message': str(e)}, e.status_code)
except Exception as e:
# But bubbles up to here and returns this
return json_response({'message': str(e)}, 500)
return wrapped_view
Run Code Online (Sandbox Code Playgroud)
我正在尝试为RDKit构建C#包装程序,但一直在努力取得进展。我尝试了两条路线:
nb这个问题漫长而无益。长话短说,使用NuGet(请参见下面的答案)。
第一个位于https://github.com/rdkit/rdkit中。
在./Code/JavaWrappers/csharp_wrapper中有带有构建说明的C#包装器,位于:https : //github.com/rdkit/rdkit/tree/master/Code/JavaWrappers/csharp_wrapper
我第一次尝试编译包装程序包括手动尝试构建这些包装程序。遵循此自述文件:https : //github.com/rdkit/rdkit/blob/master/Code/JavaWrappers/csharp_wrapper/README
在Windows上构建:
由于cmake对C#一无所知,因此其中涉及到一个不幸的手动步骤。
- 确保将cmake配置变量RDK_BUILD_SWIG_CSHARP_WRAPPER设置为ON。
- 运行cmake生成解决方案文件,然后在Visual Studio中打开它。
- 选择添加现有项目并添加$ RDBASE / Code / JavaWrappers / csharp_wrapper / RDKit2DotNet.csproj的选项
- 右键单击添加的项目(名为RDKit2DotNet),并向RDKFuncs添加依赖项(这是创建C#项目所需的C ++ dll的项目)
- 生成RDKit2DotNet项目。
您的bin目录($ RDBASE / Code / JavaWrappers / csharp_wrapper / bin / Release,如果您执行发行版本)现在包含两个DLL:-RDKFuncs.dll是包含RDKit功能的C ++ dll-RDKit2DotNet.dll包含C#包装器。若要在自己的项目中使用包装程序,应将两个dll复制到项目目录中,并添加对RDKit2DotNet.dll的引用
RDKitCSharpTest目录包含一个示例测试项目和一些代码,这些代码非常基本地使用了包装器功能。
为了cmake运行,我更新了CMakeLists.txt,告诉它如何查找swig并进行RDK_BUILD_SWIG_CSHARP_WRAPPER ON如下设置:
cmake_minimum_required(VERSION 3.14)
project (GraphMolCSharp)
set(SWIG_FOUND TRUE) # This has been added
set(SWIG_DIR ${CMAKE_CURRENT_SOURCE_DIR}) # This has been added
set(SWIG_EXECUTABLE swig.exe) …Run Code Online (Sandbox Code Playgroud) 我需要运行一个版本 16 和 typescript 的沙箱 React 应用程序。
npx create-react-app --template=typescript blah有谁知道现在使用 React 17该怎么做?
更新
正如评论中所建议的,我尝试使用以下命令进行安装:
npm init react-app migration-calculator-npm-demo --scripts-version 3.4.4
和
npm init react-app migration-calculator-npm-demo --template typescript --scripts-version 3.4.4
3.4.4看起来像是react-scripts重大更新之前的最后一个版本。
不幸的是,我两者都出错了。
内部/模块/cjs/loader.js:1088
抛出错误;^错误:找不到模块“cra-template”
和
内部/模块/cjs/loader.js:1088
抛出错误;^错误:找不到模块“cra-template-typescript”
我一直在尝试配置 CDN (S3) 以与 LiipImagineBundle 配合使用,但当它请求不存在的服务时,我总是陷入困境。
这是什么意思?
filesystem_service 属性的值必须是返回 League\Flysystem\Filesystem 实例的服务。
从这里:http ://symfony.com/doc/current/bundles/LiipImagineBundle/cache-resolver/flysystem.html
在这里:http ://symfony.com/doc/current/bundles/LiipImagineBundle/data-loader/flysystem.html
我尝试创建一个返回 League\Flysystem\Filesystem 实例的服务,如下所示:
league.flysystem.s3adaptor:
class: League\Flysystem\AwsS3v3\AwsS3Adapter
arguments: ['@acme.s3_client', '%amazon.s3.bucket%', 's3_fs', '@?']
league.flysystem.filesystem:
class: League\Flysystem\Filesystem
arguments: ['@league.flysystem.s3adaptor', '@?']
calls:
- [addPlugin, ['@oneup_flysystem.plugin.list_with']]
Run Code Online (Sandbox Code Playgroud)
我不确定这是否正确,但我无法让它工作。
任何帮助或建议将不胜感激。
我正在尝试编写一个 React Hook 来处理流式音频到使用 Meyda 分析的 AudioContext。
我已经设法让流工作并且能够提取我想要的数据。但是,我在取消初始化音频时遇到了麻烦。
如果有人可以为我提供正确设置此挂钩的指导,我将不胜感激。
当我使用这些钩子离开页面时,我目前收到以下错误:
警告:无法对卸载的组件执行 React 状态更新。这是一个空操作,但它表明您的应用程序中存在内存泄漏。要修复,请取消 useEffect 清理函数中的所有订阅和异步任务。
我试图在钩子的末尾添加一个清理功能,但我的尝试经常以音频立即切断或任何其他奇怪的错误而告终。
带有 Meyda Analyzer 的麦克风音频挂钩
export const useMeydaAnalyser = () => {
const [running, setRunning] = useState(false);
const [features, setFeatures] = useState(null);
const featuresRef = useRef(features);
const audioContext = useRef(new AudioContext());
const getMedia = async() => {
try {
return await navigator
.mediaDevices
.getUserMedia({audio: true, video: false});
} catch(err) {
console.log('Error:', err);
}
};
useEffect(
() => {
const audio = audioContext.current;
let unmounted …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Amplify Auth 来实现 OpenID Connect 隐式流程,以便为许多 React 客户端提供 SSO。
我已经能够使用 Cognito 托管 UI 来实现此功能,但这需要其他应用程序用户单击按钮来确认登录才能进行身份验证。我希望它是无缝的,即当用户登录一个站点并导航到另一个站点时,如果他们与身份验证提供者有会话,则会自动进行身份验证。
为了尝试实现这一目标,我设置了一个单独的 Amplify 应用程序,该应用程序使用 React Authenticator 组件。
我可以通过此身份验证并重定向回客户端。但是, theid_token不包含 theat_hash或nonce声明。据推测,丢失是因为身份验证提供程序应用程序在使用 Cognito 进行身份验证时at_hash未发送。丢失了,因为我还没有找到传递它的方法。responseTypetoken id_tokennonce
有没有办法让 Amplify Authenticator SignIn 请求id_token声明at_hash?
是否可以将nonce值传递给id_token声明?
请注意, 我试图遵守:https://openid.net/specs/openid-connect-core-1_0.html#ImplicitFlowSteps 特别针对此部分:3.2.2.10。身份令牌
import React from 'react';
import { Authenticator, ConfirmSignIn, SignIn } from 'aws-amplify-react';
import Amplify, { Auth } from 'aws-amplify';
import awsconfig …Run Code Online (Sandbox Code Playgroud) authentication amazon-web-services openid-connect amazon-cognito aws-amplify
我在设置JMS Serializer和FOSRestBundle时遇到问题,无法序列化这个自定义存储库方法.
如果我使用$schedules = $em->getRepository('RadioBundle:Schedule')->findAll();它工作正常,但当我尝试我的自定义方法时,没有任何字段被排除.
有人可以帮我弄清楚什么是错的吗?
控制器:
use RadioBundle\Entity\Schedule;
use Symfony\Component\HttpFoundation\Request;
use FOS\RestBundle\Controller\Annotations\View;
class ScheduleController extends BaseController
{
/**
* @param $date
* @return \Symfony\Component\HttpFoundation\Response
* @View(serializerGroups={"schedule"})
*/
public function getSchedulesScheduleAction($date)
{
$em = $this->getDoctrine()->getManager();
list($startDate, $endDate) = $this->get('radio.utils.date_and_time')->findWeekRange($date);
$schedules = $em->getRepository('RadioBundle:Schedule')->findByRange($startDate, $endDate);
$view = $this->view(
[
'schedules' => $schedules,
],
200
);
return $this->handleView($view);
}
}
Run Code Online (Sandbox Code Playgroud)
存储库方法:
class ScheduleRepository extends EntityRepository
{
/**
* @param \DateTime $startDate
* @param \DateTime $endDate
* @return array
*/
public function …Run Code Online (Sandbox Code Playgroud) 我已经看到$this->getTargetPath($request->getSession(), $providerKey)可以用来获取目标路径,但它始终是null。
有人可以解释它的用途以及为什么它总是null适合我吗?
use Symfony\Component\Security\Http\Util\TargetPathTrait;
class LoginFormAuthenticator extends AbstractFormLoginAuthenticator
{
use TargetPathTrait;
public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
{
$targetPath = $this->getTargetPath($request->getSession(), $providerKey);
if (!$targetPath) {
$targetPath = $this->container->get('router')
->generate('poll_index');
}
return new RedirectResponse($targetPath);
}
}
Run Code Online (Sandbox Code Playgroud) 我最近使用下面的 FFmpeg bash 命令来捕获屏幕录制。
我可以做出任何改进来简化此流程吗?
或者也许进行一些设置来减小输出文件的大小?
理想情况下,我想直接捕获到 mp4。这可能吗?
任何有关 FFmpeg 屏幕录制的一般建议将不胜感激。
ffmpeg -f x11grab -y -r 30 -s 1920x1080 -i :0.0 -vcodec huffyuv out.avi
# Then convert it to .mp4
ffmpeg -y -i out.avi -s 1920x1080 -f mp4 -vcodec libx264 -preset slow -crf 18 -b:v 3000k -maxrate 4000k -bufsize 512k -c:a aac -b:a 128k -strict -2 out.mp4
# and remove the .avi
rm out.avi
Run Code Online (Sandbox Code Playgroud) 我有一个路由设置到电台节目时间表,我传递给的参数ScheduleComponent是日期.但是,我在尝试为路径设置默认值时遇到问题.
在经历了很多失败之后,我决定总是在链接上设置日期.但现在我需要突出显示.active路线,因此需要弄清楚如何设置计划的默认值.
有人可以帮助我指出正确的方向.
目前的路线:
const routes = [
{
path: 'schedule/:date',
component: ScheduleComponent,
}
]
Run Code Online (Sandbox Code Playgroud)
我正在考虑做这样的事情,但无法安排在给定日期前往正确的地方.我不确定这是正确的方法:
const routes = [
{
path: 'schedule',
component: ScheduleComponent,
redirectTo: 'schedule/yyyy-MM-dd', // Replacing yyyy-MM-dd with todays date.
children: [
{ path: ':date', component: ScheduleComponent, pathMatch: 'full' }
]
}
]
Run Code Online (Sandbox Code Playgroud)
主导航构造器,这是我想要使用的地方/schedule:
constructor(private datePipe: DatePipe, private colorService: ColorService) {
this.navs = [
{url: '/schedule/' + this.datePipe.transform(new Date(), "yyyy-MM-dd"), content: "Schedule"},
// ... other routes
];
Run Code Online (Sandbox Code Playgroud)
示例链接:
<a [routerLink]="['/schedule', day …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用@Groups注释来序列化我的数据,但我只是收到一个空数组。
我试过@Serializer\Expose在我想显示的字段上使用,但随后它们随处可见而忽略了这些组。
从我读过的内容来看,我很确定我应该只需要使用@Groups注释,但我最终得到了这个(有两个计划实体):
{
"schedules": [
{},
{}
]
}
Run Code Online (Sandbox Code Playgroud)
它的工作方式似乎发生了变化,我找到了以前版本 FOSRestBundle 的示例,我只是无法将它们移植到新版本。
据我了解,您可以在序列化程序上下文中设置组并使用它来设置视图上下文,但我对此并不走运。
https://github.com/FriendsOfSymfony/FOSRestBundle/blob/master/UPGRADING-2.0.md
View::setSerializationContext 和 View::getSerializationContext 已被删除。将 View::setContext 和 View::getContext 与新的 Context 类一起使用。
前:
Run Code Online (Sandbox Code Playgroud)use JMS\Serializer\SerializationContext; $view = new View(); $context = new SerializationContext(); $view->setSerializationContext($context); $context = $view->getSerializationContext();后:
Run Code Online (Sandbox Code Playgroud)use FOS\RestBundle\Context\Context; $view = new View(); $context = new Context(); $view->setContext($context); $context = $view->getContext();
我花了很长时间来解决所有这些问题,并且非常感谢任何帮助为我指明正确方向的帮助。
除了下面我试图use FOS\RestBundle\Controller\Annotations as Rest; 和
@Rest\View(serializerGroups({"schedule"})注释与控制器上,它有同样的效果,因为我看到现在(即无)。
调度控制器
use FOS\RestBundle\Context\Context;
class ScheduleController extends BaseController
{ …Run Code Online (Sandbox Code Playgroud) 我使用的是PyCharm,通常依靠alt + enter快捷方式来自动导入类和函数。
但是,它不使用绝对导入路径。它在本地运行良好,但是当我推送到GitHub时,我的测试在TravisCI中失败了。
有谁知道强制PyCharm以绝对路径导入的方法?
drone_squadron.api.drone_api如果我使用像这样api.drone_api的东西,则远程测试无法找到导入,则需要像这样导入。这适用于所有本地进口。
我希望所有时间始终都是绝对进口。相对进口使我在打包项目时遇到了问题。我认为始终使用绝对导入会更容易。
https://github.com/sarcoma/drone_squadron_api_prototype
.
??? coverage.xml
??? LICENSE.md
??? pytest.ini
??? README.md
??? requirements.txt
??? drone_squadron
? ??? app.py
? ??? endpoints.http
? ??? flask.cfg
? ??? __init__.py
? ??? load_fixtures.py
? ??? main.py
? ??? router.py
? ??? schema.py
? ??? test_flask.cfg
? ??? api
? ? ??? base_api.py
? ? ??? drone_api.py
? ? ??? gimbal_api.py
? ? ??? __init__.py
? ? ??? price_api.py
? ? ??? round_type_api.py …Run Code Online (Sandbox Code Playgroud) symfony ×4
reactjs ×3
doctrine-orm ×2
amazon-s3 ×1
angular ×1
aws-amplify ×1
c# ×1
cmake ×1
exception ×1
ffmpeg ×1
flask ×1
flysystem ×1
nuget ×1
pycharm ×1
python ×1
python-3.x ×1
rdkit ×1
react-hooks ×1
redux ×1
redux-form ×1
symfony-3.4 ×1