小编Ste*_*eve的帖子

触发Redux操作以响应React Router中的路由转换

我在我的最新应用程序中使用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.

reactjs react-router redux

53
推荐指数
2
解决办法
2万
查看次数

Redux:登录请求后保存cookie的正确位置是什么?

我有以下情况:用户输入他的凭据并单击" 登录"按钮.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)

cookies redux

20
推荐指数
3
解决办法
1万
查看次数

如何一个接一个地分派多个动作

在我的react/redux应用程序中,我经常想要一个接一个地发送多个动作.

给出以下示例:成功登录后,我想存储用户数据,然后我想启动另一个从服务器加载应用程序配置的异步操作.

我知道我可以用它redux-thunk来构建这样的动作创建者

function loginRequestSuccess(data) {
  return function(dispatch) {
    dispatch(saveUserData(data.user))
    dispatch(loadConfig())
  }
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:

  1. 当第一个dispatch返回时,所有减少器是否已经更改了该状态?我想知道两个调度调用是否严格按顺序运行.
  2. 这种方法是否被认为是分派多项行动的最佳做法?如果没有,你还会建议什么呢?

谢谢你的帮助!

reactjs redux

19
推荐指数
1
解决办法
1万
查看次数

尝试在facebook集成中调用虚方法'int java.lang.Object.hashCode()'

我正在尝试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)

android facebook android-studio

12
推荐指数
2
解决办法
2万
查看次数

如何从建筑物中扔2个鸡蛋并找到地板F与~c*sqrt(F)投掷?

我正在阅读Robert Sedgewick的算法第4版,他有以下任务:

假设你有一个N层建筑和2个鸡蛋.假设如果鸡蛋被扔掉F楼或更高楼层,鸡蛋就会被打破,否则就会破裂.您的成本模型是投掷次数.设计一个策略来确定F,使某些常数c的投掷数量为~c√F.

任务的第一部分是在2√N步骤中找到F,这是一个解决方案:

第1部分的解决方案:

  • 要达到2*sqrt(N),请在楼层sqrt(N),2*sqrt(N),3*sqrt(N),...,sqrt(N)*sqrt(N)下降鸡蛋.(为简单起见,我们假设sqrt(N)是一个整数.)
  • 假设蛋在k*sqrt(N)水平处破裂.
  • 然后使用第二个蛋,您应该在区间(k-1)*sqrt(N)到k*sqrt(N)中执行线性搜索.
  • 总共可以在最多2*sqrt(N)的试验中找到F楼.

他还提供了~c√F部分的提示(第2部分):

第2部分的提示:1 + 2 + 3 + ... k~1/2 k ^ 2.

那么~c√F步骤的算法是什么?

algorithm search dynamic-programming binary-search divide-and-conquer

7
推荐指数
1
解决办法
866
查看次数

将唯一标识符附加到 Laravel 请求

laravel 是否有一个包可以为每个请求添加唯一标识符,以便将其也用于日志?

例如:我知道 request-idas12121-1212s-121有错误,我可以查看日志以查找任何错误。

该 request-id 将在 UI 中看到,当从客户端获取包含错误的打印屏幕时,我可以进行调试

php request laravel

7
推荐指数
1
解决办法
4839
查看次数

使用Knp Snappy生成pdf文件时出现错误字符

我正在使用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)

我收到这个内容(法语字符出现在坏字符中): 在此输入图像描述

php pdf pdf-generation wkhtmltopdf symfony

6
推荐指数
1
解决办法
4594
查看次数

在Java中创建泛型类型的随机值

我有以下内容:

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();不同类型的读取线上.

我正在考虑做以下事情:

  1. 将泛型类中的类传递给RandomList
  2. 使用instanceof检查传入的类对所需的类型(整数,字符...),并根据检查返回适当的随机值

这有意义吗?有没有其他/更好的方法来实现我想要的?

java generics random

6
推荐指数
1
解决办法
1418
查看次数

用PDFBOX写阿拉伯字符

  1. 更新1

我正在尝试使用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字体,但我仍然有相同的结果.

  1. 更新2

通过使用方法'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)

java pdfbox

5
推荐指数
1
解决办法
2610
查看次数

Fgets()不断跳过第一个字符

这是在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)

c debugging fgets

5
推荐指数
2
解决办法
2737
查看次数