我在我的最新应用程序中使用react-router和redux,并且我面临一些与基于当前url参数和查询所需的状态更改有关的问题.
基本上我有一个组件,每次url更改时都需要更新它的状态.正在通过redux通过道具传递状态,装饰器就像这样
@connect(state => ({
campaigngroups: state.jobresults.campaigngroups,
error: state.jobresults.error,
loading: state.jobresults.loading
}))
Run Code Online (Sandbox Code Playgroud)
目前我正在使用componentWillReceiveProps生命周期方法来响应来自react-router的url更改,因为当url在this.props.params和this.props.query中更改时,react-router会将新的props传递给处理程序 - 这种方法的主要问题是我在这个方法中触发一个动作来更新状态 - 然后传递新的道具组件,这将再次触发相同的生命周期方法 - 所以基本上创建一个无限循环,目前我正在设置状态变量来阻止这种情况发生.
componentWillReceiveProps(nextProps) {
if (this.state.shouldupdate) {
let { slug } = nextProps.params;
let { citizenships, discipline, workright, location } = nextProps.query;
const params = { slug, discipline, workright, location };
let filters = this._getFilters(params);
// set the state accroding to the filters in the url
this._setState(params);
// trigger the action to refill the stores
this.actions.loadCampaignGroups(filters);
}
}
Run Code Online (Sandbox Code Playgroud)
是否存在基于路由转换触发操作的标准方法或者我可以将存储的状态直接连接到组件的状态而不是通过props传递它吗?我曾尝试使用willTransitionTo静态方法,但我无法访问this.props.dispatch.
我有以下情况:用户输入他的凭据并单击" 登录"按钮.API调用在动作创建者中完成redux-thunk
.API调用成功后,将调度另一个包含服务器响应的操作.在(成功)登录后,我想将用户会话ID存储在cookie中(通过react-cookie
).
行动创造者
export function initiateLoginRequest(username, password) {
return function(dispatch) {
dispatch(loginRequestStarting())
return fetch('http://path.to/api/v1/login',
{
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({
username: username,
password: password
})
})
.then(checkStatus)
.then(parseJSON)
.then(function(data) {
dispatch(loginRequestSuccess(data))
})
.catch(function(error) {
dispatch(loginRequestError(error))
})
}
}
export function loginRequestSuccess(user) {
return {
type: ActionTypes.LOGIN_REQUEST_SUCCESS,
user
}
}
Run Code Online (Sandbox Code Playgroud)
减速器
export default function user(state = initialState, action) {
switch (action.type) {
case ActionTypes.LOGIN_REQUEST_SUCCESS:
cookie.save('sessionId', action.user.sid, { path: '/' }) …
Run Code Online (Sandbox Code Playgroud) 在我的react/redux应用程序中,我经常想要一个接一个地发送多个动作.
给出以下示例:成功登录后,我想存储用户数据,然后我想启动另一个从服务器加载应用程序配置的异步操作.
我知道我可以用它redux-thunk
来构建这样的动作创建者
function loginRequestSuccess(data) {
return function(dispatch) {
dispatch(saveUserData(data.user))
dispatch(loadConfig())
}
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:
dispatch
返回时,所有减少器是否已经更改了该状态?我想知道两个调度调用是否严格按顺序运行.谢谢你的帮助!
我正在尝试Facebook集成时收到以下错误:
11-18 15:57:54.186 23052-23093/com.creaa.admin.mylogin E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #2
11-18 15:57:54.186 23052-23093/com.creaa.admin.mylogin E/AndroidRuntime: Process: com.creaa.admin.mylogin, PID: 23052
11-18 15:57:54.186 23052-23093/com.creaa.admin.mylogin E/AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Object.hashCode()' on a null object reference
11-18 15:57:54.186 23052-23093/com.creaa.admin.mylogin E/AndroidRuntime: at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:746)
11-18 15:57:54.186 23052-23093/com.creaa.admin.mylogin E/AndroidRuntime: at java.util.concurrent.ConcurrentHashMap.containsKey(ConcurrentHashMap.java:774)
11-18 15:57:54.186 23052-23093/com.creaa.admin.mylogin E/AndroidRuntime: at com.facebook.internal.Utility.queryAppSettings(Utility.java:822)
11-18 15:57:54.186 23052-23093/com.creaa.admin.mylogin E/AndroidRuntime: at com.facebook.login.widget.LoginButton$1.run(LoginButton.java:489)
11-18 15:57:54.186 23052-23093/com.creaa.admin.mylogin E/AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
11-18 15:57:54.186 23052-23093/com.creaa.admin.mylogin E/AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
11-18 15:57:54.186 23052-23093/com.creaa.admin.mylogin E/AndroidRuntime: at java.lang.Thread.run(Thread.java:818)
Run Code Online (Sandbox Code Playgroud)
以下是我的主要活动:
public class MainActivity …
Run Code Online (Sandbox Code Playgroud) 我正在阅读Robert Sedgewick的算法第4版,他有以下任务:
假设你有一个N层建筑和2个鸡蛋.假设如果鸡蛋被扔掉F楼或更高楼层,鸡蛋就会被打破,否则就会破裂.您的成本模型是投掷次数.设计一个策略来确定F,使某些常数c的投掷数量为~c√F.
任务的第一部分是在2√N步骤中找到F,这是一个解决方案:
第1部分的解决方案:
他还提供了~c√F部分的提示(第2部分):
第2部分的提示:1 + 2 + 3 + ... k~1/2 k ^ 2.
那么~c√F步骤的算法是什么?
algorithm search dynamic-programming binary-search divide-and-conquer
laravel 是否有一个包可以为每个请求添加唯一标识符,以便将其也用于日志?
例如:我知道 request-idas12121-1212s-121
有错误,我可以查看日志以查找任何错误。
该 request-id 将在 UI 中看到,当从客户端获取包含错误的打印屏幕时,我可以进行调试
我正在使用Symfony2.使用此代码生成pdf文件时:
public function printAction($id)
{
// initialiser $demande
$html = $this->renderView('PFETimeBundle:Demande:print.html.twig',
array('demande'=> $demande)
);
return new Response(
$this->get('knp_snappy.pdf')->getOutputFromHtml($html),
200,
array(
'Content-Type' => 'application/pdf',
'Content-Disposition' => 'attachment; filename="file.pdf"'
)
);
}
Run Code Online (Sandbox Code Playgroud)
我收到这个内容(法语字符出现在坏字符中):
我有以下内容:
public class RandomList {
private List<Integer> list;
public List<Integer> getList() {
return list;
}
public RandomList (int n) {
list = new ArrayList<Integer>();
Random rand = new Random();
rand.setSeed(System.currentTimeMillis());
for (int i=0; i < n; i++)
{
Integer r = rand.nextInt();
list.add(r);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这给了我一个填充随机整数值的列表.我想概括一下,也可以得到一个随机字符值列表或者其他类型的随机值列表.
所以我想要的是通用类型版本class RandomList<T>
.我可以用"T"代替"Integer",但是我会卡在Integer r = rand.nextInt();
不同类型的读取线上.
我正在考虑做以下事情:
instanceof
检查传入的类对所需的类型(整数,字符...),并根据检查返回适当的随机值这有意义吗?有没有其他/更好的方法来实现我想要的?
我正在尝试使用pdfbox在pdf文档中编写一些阿拉伯字符.结果我得到了一些奇怪的角色.您可以在下面找到我用于测试的代码段.请注意,相同的代码用于打印拉丁字符没有任何问题.
public static void main(String[] args) throws Exception {
PDDocument document = new PDDocument();
PDPage page = new PDPage(PDPage.PAGE_SIZE_A4);
document.addPage(page);
PDPageContentStream stream = new PDPageContentStream(document, page,true, true);
//Use of a unicode font
PDFont font = PDTrueTypeFont.loadTTF(document,"C:/arialuni.ttf");
font.setFontEncoding(new WinAnsiEncoding());
stream.setFont(font, 12);
stream.beginText();
stream.moveTextPositionByAmount(40, 600);
stream.drawString("?? ??? ????? ????????? ?? ");
stream.endText();
stream.close();
document.save("c:\\resultpdf.pdf");
document.close();
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助.我尝试从微软网站下载的Unicode字体,但我仍然有相同的结果.
通过使用方法'drawUnicodeString'和方法'loadTTF'我得到了PDFBOX-922 我能够写阿拉伯字符但它们是断开连接并从左到右排序.以下是两种方法'drawUnicodeString'和'loadTTF'
public void drawUnicodeString(String text) throws IOException {
COSString string = new COSString();
for (int i = 0; i < text.length(); …
Run Code Online (Sandbox Code Playgroud) 这是在unix中模拟cat命令的更大程序的一部分.现在尝试获取输入并将其发送到stdout:
char in[1000];
int c = 0;
while ((c = getchar()) != EOF)
{
fgets(in,1000,stdin);
fputs(in, stdout);
}
Run Code Online (Sandbox Code Playgroud)
这会将输出发送到stdout,但在每种情况下都会跳过第一个字母.例如,如果我输入单词Computer
我回来了:
omputer
Run Code Online (Sandbox Code Playgroud)